ref не работает в контроллере для extjs4 mvc application - PullRequest
0 голосов
/ 24 мая 2011

Я пытаюсь собрать приложение MVC.

Ниже приведен мой код файла app / controller / project.js

Ext.define('rt.controller.project', {
extend: 'Ext.app.Controller',

stores: ['project'],
models: ['project'] ,   
views: ['project.main', 'project.projectlist'],

refs: [
       {ref: 'projectList', selector: 'projectlist'},
       {ref: 'projectData', selector: 'projectlist dataview'}
       ],


init: function() {
    this.control({
        'projectlist dataview': {
            selectionchange: this.loadProject
        },
        'projectlist button[action=add]': {
            click: this.addProject
        },
        'projectlist button[action=remove]': {
            click: this.removeProject
        }
    });
},

onLaunch: function() {
    console.log(this.getProjectData());
    var dataview = this.getProjectData(),
        store = this.getProjectStore();
     console.log("Stoer = " + store);   
    dataview.bindStore(store);
    dataview.getSelectionModel().select(store.getAt(0));

},


loadProject: function(selModel, selected) {

    console.log("Load Project");

},


addProject: function() {
    console.log("Add Project");
},

removeProject: function() {
    console.log("Remove Project");
},


});

Ниже приведен код для моего приложения / view / project / projectlist.js

Ext.define('rt.view.project.projectlist', {
extend: 'Ext.panel.Panel',
alias: 'widget.projectlist',

requires: ['Ext.toolbar.Toolbar'],

title: 'Projects',
collapsible: true,
animCollapse: true,
margins: '5 0 5 5',
layout: 'fit',

initComponent: function() {
    Ext.apply(this, {
        items: [{
            xtype: 'dataview',
            trackOver: true,
            store: this.store,
            cls: 'project-list',
            itemSelector: '.project-list-item',
            overItemCls: 'project-list-item-hover',
            tpl: '<tpl for="."><div class="project-list-item">{name}</div></tpl>',
            listeners: {
                selectionchange: this.onSelectionChange,
                scope: this
            }
        }],

        dockedItems: [{
            xtype: 'toolbar',
            items: [{
                text: 'Add project',
                action: 'add'
            }, {
                text: 'Remove project',
                disabled: true,
                action: 'remove'
            }]
        }]
    });

    this.callParent(arguments);
},

onSelectionChange: function(selmodel, selection) {
    var selected = selection[0],
        button = this.down('button[action=remove]');
    if (selected) {
        button.enable();
    }
    else {
        button.disable();
    }
}
});

Когда я запускаю свое приложение, оно показывает следующую ошибку

отображение данных не определено

в файле controller / project.js в строке 34, следующий за

dataview.bindStore(store);

похоже, что следующее не работает в коде контроллера

refs: [
    {ref: 'projectList', selector: 'projectlist'},
    {ref: 'projectData', selector: 'projectlist dataview'}
],

Кто-нибудь имеет представление о том, что может вызвать это?

Дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

1 голос
/ 24 мая 2011

У меня была похожая проблема со ссылкой на dataview.Вот как я изменил мою строку селектора:

{ref: 'projectData', selector: 'projectlist > dataview' }

Это должно исправить это.Но я хотел бы спросить вас, что console.log(this.getProjectData()); в методе onLaunch отображается на консоли?Кроме того, я не вижу ref для ProjectStore, чтобы вы могли выполнить команду:

store = this.getProjectStore();

Вы пропустили ссылку projectStore в списке refs?

...