0

私のアプリケーション(mvc)は、私のビューに3つのタブがあるように設計されています

Ext.define('App.view.cube.MainView', {
    extend: 'Ext.panel.Panel',
    ....
    layout: 'card',
    ...
    dockedItems: [{
        xtype: 'panel',
        items: [{
            // a drop down containing 2 choices
        }]
    }],
    items: [{
        xtype: 'tabpanel',
        itemId: 'mmtabs',
        activeTab: 1,
        items: [{
            title: 'Served',
            xtype: 'treepanel', // my own xtype extending this xtype
            id: 'Served :',
            itemId: '1'
        }, {
            title: 'UnServed',
            xtype: 'treepanel', // my own xtype extending this xtype
            id: 'UnServed :',
            itemId: '0'
        }, {
            title: 'Total',
            xtype: 'treepanel', // my own xtype extending this xtype
            id: 'Total :',
            itemId: '2'
        }]
    }]
});

基本的に、2つの選択肢があるドロップダウンを使用すると、ユーザーはグリッド内の必要な列を表示できます(ツリーパネル)。アプリが初めて読み込まれ、ユーザーがドロップダウンで別の選択肢に変更したとき、列は本来のように非表示になりません。しかし、彼が別のタブに移動してから同じことを行うと、すべてが想定どおりに機能します。問題がわかりません。

上記のコードで私は再利用しています

xtype : 'treepanel', // my own xtype extending this xtype

異なるitemIdsを使用して、3つのタブ間で(これで問題ないことを願っています)。

私のコントローラーには、ビュー内のコンボボックスで呼び出されるビュー(特定の列を非表示/表示)initialview(すべてのタブのすべての列を繰り返して適切なビューを設定)changeviewに切り替える機能があります。

toggleView: function (cubemwwar, viewId) {
    if ("2" == viewId) {
        cubemwwar.columns[1].setVisible(false);
        cubemwwar.columns[2].setVisible(false);
        cubemwwar.columns[3].setVisible(false);
        cubemwwar.columns[4].setVisible(true);
        cubemwwar.columns[5].setVisible(true);
        cubemwwar.columns[6].setVisible(true);
    }
    if ("1" == viewId) {
        cubemwwar.columns[1].setVisible(true);
        cubemwwar.columns[2].setVisible(true);
        cubemwwar.columns[3].setVisible(true);
        cubemwwar.columns[4].setVisible(false);
        cubemwwar.columns[5].setVisible(false);
        cubemwwar.columns[6].setVisible(false);
    }
}, // on controller's onlaunch
initialView: function () {
    var numTabs = this.getCubeMainView().query('#mmtabs')[0].items.length;
    for (var i = 0; i < numTabs; i++) {
        var tab = this.getCubeMainView().query('#mmtabs')[0].items.items[i];
        this.toggleView(tab, 1);


    }
},
// change views based on user selection 
//   from the combobox's select event
changeView: function (combo, rec, idx) {
    // first time somehow the columns do not hide
    // hide/show appropriate columns
    // rec[0].data.id  .. .possible values 1 and 2 only.
    this.toggleView(this.getCubeMainView().query('#mmtabs')[0].getActiveTab(), rec[0].data.id);
},
4

1 に答える 1

0

起動時に、すべてのタブを繰り返してアクティブに設定してから、最初のタブをアクティブに戻しました。それでこの問題は解決しました。

for(var i=0;i<numTabs ; i++)
{
    var tab = tabPanel.items.items[i];
    this.toggleView(tab,1);
    tabPanel.setActiveTab(i);
}
tabPanel.setActiveTab(0);
this.startingup = false;
于 2012-10-25T14:25:16.050 に答える