1

私のアプリの簡単な概要は次のとおりです。

コンテナーに 2 つのリージョンがあるアプリケーションがあります。

  1. 西 -> ツリーパネル
  2. センター -> 0 アイテムの「カード」レイアウトのコンテナー。

ツリーノードが選択されるたびに、コントローラーは「node_viewId」と呼ばれる独自のカスタム プロパティをチェックして、その値が未定義かどうかを確認します。

定義されていない場合は、「widget.myowngridpanel」(「gridpanel」から拡張) のインスタンスが作成され、一意のストアが割り当てられます。その後、このインスタンスが「カード」に追加され、このインスタンスがアクティブなアイテムとして中央領域に表示されるようになります。

なぜこの設定?

各ノードは、同じビューに表示する必要があるさまざまなデータを表し、ビューの状態を保持する必要があります (たとえば、ノード A ではユーザーが 1 列目を並べ替えて 2 列目を非表示にし、ノード B ではユーザーが 3 列目を並べ替えて 1 列目を非表示にします)。桁)。

私の実装:

ほとんど動作するようになりましたが、別のアクティブなアイテムを切り替えると、ビューが正しく表示されませんでした。

これが私のコントローラーのコードです(例として要約されたバージョン):

this.control({
    '#treePanelID' : {
        itemclick : function(pThis, pRecord, pItem, pIndex, pE, pEOpts) {

        var newCenterView,newCenterViewId,newGridStore;
        if (pRecord.data.node_type === 'NodeA' && 
            pRecord.data.node_viewId === undefined) {

             newCenterView = Ext.create('widget.myowngridpanel',{
                                title:'GridPanel NodeA',
                    columns:[{ header: 'Node A item1', dataIndex: 'name'},
                                      {header: 'Node A item2', dataIndex: 'phone'}]
                                });

             newGridStore = Ext.create('NodeAStore');
             newCenterViewId = 'nodeAID';
        }
        else
        if (pRecord.data.node_type === 'NodeB' && 
            pRecord.data.node_viewId === undefined) {

             newCenterView = Ext.create('widget.myowngridpanel',{
                                title:'GridPanel NodeB',
                    columns:[{ header: 'Node B item1', dataIndex:
                                'address'},{header: 'Node B item2', dataIndex: 'city'},
                                { header: 'Node B item3', dataIndex: 'zipcode'}]});
             newGridStore = Ext.create('NodeBStore');
             newCenterViewId = 'nodeBID';
        }

       if(newCenterView !== undefined && 
          newCenterViewId !== undefined) {
            pRecord.data.node_viewId = newCenterView.itemId = newCenterViewId;
            this.getCenterCard().add(newCenterView);
            newCenterView.bindStore(newGridStore);
        }

        this.getCenterCard().getLayout().setActiveItem(pRecord.data.node_viewId);

問題の視覚化に役立つシナリオを次に示します。

まず、ユーザーが「ノード A」を選択すると、「nodeAID」ビューの作成プロセスに進みます。期待どおりに表示されます。topBar にタイトル「GridPanel NodeA」が表示され、グリッドには「Node A item1」と「Node A item2」の 2 つの列で構成される 1 つのヘッダー行が表示されます。

次に、ユーザーが「ノード B」を選択すると、「nodeBID」ビューの作成プロセスに進みます。ここでビューの問題が発生します。表示されるのは、topBar のタイトル「GridPanel NodeB」と、次の列を持つこれらの 2 つのヘッダー行を含むグリッドです。

1) 「ノード B 項目 1」、「ノード B 項目 2」、「ノード B 項目 3」

2) 「ノード A 項目 1」、「ノード A 項目 2」

そのため、何らかの理由で、「NodeAID」ビューの以前のヘッダー列が「NodeBID」ビューにも存在します。これまでにわかったことは、エイリアス (widget.myowngridpanel) によるビューの作成が原因でこの問題が発生することです。「Ext.grid.panel」を使用してビューの作成をまっすぐにすると、完全に機能します。しかし、エイリアスを介してビューを作成できるようにする必要があります。

私の説明をより明確にする必要がある場合は、お知らせください。

ヘルプ!

更新 04/23:

「widget.myowngridpanel」に関する情報がありますが、問題とは関係がないと思ったため、入れませんでした。「widget.myowngridpanel」には、2 つのボタンで構成される DockedItems があります。削除すると、問題は消えます。これは私がドッキングアイテムを持っている方法です:

dockedItems: [{
        xtype:'toolbar',
        height:'29px',
        dock:'top',
        items:[{
            xtype:'button',
            text:'Button 1',
            action:'button1pressed'
        },{
            xtype:'button', 
            text:'Button 2',
            action:'button2pressed'
        }]
     }]

何か案は?

4

1 に答える 1

0

作成している各パネルに固有のstateIdプロパティを追加してみてください。これは、列、順序、位置などのグリッド構成を保存/復元するために使用されます。

于 2012-04-22T11:43:16.257 に答える