2

動的に作成されたグリッドをダブルクリックすると、フォームを開こうとしています。これは静的グリッドでは問題になりませんが、動的グリッドを作成すると、ダブルクリックイベントをキャッチできません。

私のナビゲーションコントローラー(パネルを作成して追加するもの)は次のようになります。

//Housekeeping and helper functions removed
onNavigationSelection: function(view, record, item, index, eventobj, obj) {
    var groupsstore = this.getGroupsStore();

    groupsstore.load({
        callback: this.createPanels,
        params: {},
        scope:this
    });
},
createPanels: function() {
for (var i = 0; i < groupArrayCounter.length; i++) {
        var storeName = 'store' + groupArrayCounter[i];
        var panelName = 'panel' + groupArrayCounter[i];
        var newstore = createStore(storeName, GroupArrays[groupArrayCounter[i]]);
        var panel = createPanel(panelName, newstore);
        this.getGroupPanel().add(panel);
}

    function createStore(name, data) {
        var createstore = Ext.create('Ext.data.ArrayStore', {
            extend: 'Ext.data.ArrayStore',
            requires: 'NG.model.Person',
            model: 'NG.model.Person',
            data: data,
            fields: ['id', 'auc', 'dateAdmitted', 'name', 'cpr', 'department', 'group' , 'active', 'dateBooked', 'dateStart', 'dateEndCalculated', 'dateEndActual', 'comments']
        });

        return createstore;
}

    function createPanel(name, store) {
        var createpanel = Ext.create('Ext.grid.Panel', {
            store: store,
            title: " Muh ",
            alias: 'widget.'+name,
            columns: [
                {header: 'Navn', dataIndex: 'name', flex: 1}
            ]});

        return createpanel;
}

私のChangePersonコントローラー(人をダブルクリックできるはずのコントローラー):

init: function() {
    this.control({
        'activepersons': {
            itemdblclick: this.onActivepersonsClick
        },
        'waitingpersons': {
            itemdblclick: this.onWaitingpersonsClick
        },
        'group': {
            itemdblclick: this.onGroupClick
        },
        //This is what I want, but it does not work
        'panel17': {
            itemdblclick: this.onGroupClick
        },
        //This is what I want, but it does not work
        'panel19': {
            itemdblclick: this.onGroupClick
        }

    });
},
onActivePersonsClick: function(view, record, item, index, eventobj, obj) {
    var view = Ext.widget('personform');
    view.down('form').loadRecord(record);
},
onWaitingPersonsClick: function(view, record, item, index, eventobj, obj) {
    var view = Ext.widget('personform');
    view.down('form').loadRecord(record);
},
// Is never called
onGroupClick: function(view, record, item, index, eventobj, obj) {
    var view = Ext.widget('personform');
    view.down('form').loadRecord(record);
}

デバッグから、エイリアスpanel17とpanel19が作成されたgrid.Panelがあることがわかりますが、後で追加されるため、上記はもちろん機能しません。達成したいのは、ChangePersonコントローラーのonGroupClickイベントを動的に作成されたグリッドに接続することですが、ナビゲーションでChangePersonコントローラーにアクセスできないようであるため、これを行う方法がわかりません。コントローラ。

よろしくお願いいたします。

アンドレアス

4

1 に答える 1

1

this.controlは、コントローラーの作成時に存在するクラスにリスナーを追加します。on簡単な解決策は、次のように、パネルの作成後にイベントを添付する関数を使用することです。

 function createPanel(name, store) {
        var createpanel = Ext.create('Ext.grid.Panel', {
            store: store,
            title: " Muh ",
            alias: 'widget.'+name,
            columns: [
                {header: 'Navn', dataIndex: 'name', flex: 1}
            ]});
        createdPanel.on('itemdblclick', function(view, record, item, index, eventobj, obj) {
                      var view = Ext.widget('personform');
                      view.down('form').loadRecord(record);
                   });
        return createpanel;
}
于 2011-11-04T16:20:48.247 に答える