4

「app/store/」に「menu1.js」、「menu2.js」などのメニュー ツリー ストアがいくつかあります。私の Web ページでは、上部の領域にナビゲーション バーがあり、左側の領域にあるメニュー ツリーを制御してメニューを変更するための多くのボタンがあります。しかし、このツリーパネルでストアを変更する方法がわかりません。これが私のコードです:

app/store/Menus1.js

Ext.define('Crm.store.Menus1', {
    extend: 'Ext.data.TreeStore',
    root: {
        expanded: true, 
        children: [{    
            text: "subroot1",
            expanded: true,
            children:[
                { id: 'item01', text: "item1", leaf: true },
                { id: 'item02', text: "item2", leaf: true },
            ]
        }, {
            text: "subroot2",, 
            expanded: true, 
            children: [
                { id: 'item03', text: "item3", leaf: true },
                { id: 'item04', text: "item4", leaf: true }
            ]
        }]
    }
});

アプリ/ストア/Menus2.js

Ext.define('Crm.store.Menus2', {
    extend: 'Ext.data.TreeStore',
    root: {
        expanded: true, 
        children: [{
            text: "subroot1",
            expanded: true,
            children:[
                { id: 'item05', text: "item5", leaf: true },
                { id: 'item06', text: "item6", leaf: true },
            ]
        }, {
            text: "subroot2",, 
            expanded: true, 
            children: [
                { id: 'item07', text: "item7", leaf: true },
                { id: 'item08', text: "item8", leaf: true }
            ]
        }]
    }
});

app/view/MenuBar.js (つまり、ストアを設定していません)

Ext.define('Crm.view.MenuBar', {
    extend: "Ext.panel.Panel",
    alias:'widget.crm_menubar',
    initComponent: function() {
        Ext.apply(this, {
            id: 'crm-menuBar',
            xtype:'panel',
            width: 212,
            frameHeader:false,
            hideCollapseTool:true,
            split: true,
            collapsible:true,
            collapseMode: 'mini',
            items: [
                Ext.create('Ext.tree.Panel', {
                    id: 'menutree',
                    border: false,
                    margin:'5 4 0 4',
                    height: '98%',                  
                    rootVisible: false,
                }),
            ]
        });
        this.callParent();
    }
});

アプリ/コントローラー/Navi.js

Ext.define('Crm.controller.Navi', {
    extend: 'Ext.app.Controller',
    requires: [ 'Crm.store.Menus1', 'Crm.store.Menus2' ],
    stores: [ 'Menus1','Menus2' ],
    refs: [
        { ref: 'crm_naviationBar', selector: 'crm_naviationBar' },
        { ref: 'crm_menubar', selector: 'crm_menubar' } 
    ],
    init: function(){
        var menutree = Ext.getCmp('menutree');
        var menustore = menutree.getStore();
        menustore = Menus1;   // I want initial the menu's store with Menus1
        //menustore = Ext.create('Crm.store.Menus1');  

        this.control({
            'button': {
                click: this.onItemClicked,
                scope: this
            } 
        });
    },
    onItemClicked: function(btn,eventObj){
        var menustore = Ext.getCmp('menutree').getStore();
        var btnId = btn.getId();

        if (btnId == 'btn_menus1') { //When button1 is clicked, change menu to menus1
            menustore = Menus1;
            //menustore = Ext.create('Crm.store.Menus1');       
        } else if (btnId == 'btn_menus2') { //When button2 is clicked, change menu to menus2
            menustore = Menus2;
            //menustore = Ext.create('Crm.store.Menus1');
        }
    }
});
4

4 に答える 4

1

残念ながら、これは Sencha が何ヶ月も無視してきたバグです :(

http://www.sencha.com/forum/showthread.php?143843-Calling-reconfigure%28%29-on-Ext.tree.Panel-throws-error

于 2012-01-16T23:59:32.680 に答える
0

このスレッドを参照してください:

http://www.sencha.com/forum/showthread.php?143843-Calling-reconfigure%28%29-on-Ext.tree.Panel-throws-error

最新の 4.1 ドキュメントによると、reconfigure()から削除されましたExt.tree.Panel

注:しかし、奇妙なことに、呼び出しreconfigure()てもエラーは発生しません。つまり、メソッドはまだ存在しますが、別のエラーが返されるため、正しく機能させることができません。

4.0 のコメントでの議論も参照してください。

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.tree.Panel-method-reconfigure

于 2012-10-11T13:07:40.310 に答える
0

reconfigure()ストアを取得した後、TreePanel でメソッドを使用できるはずです。これは、グリッドのストアを変更するために使用するプロセスと同じです。

var store = Ext.getStore('newStore');
var menutree = Ext.getCmp('menutree');

menutree.reconfigure(store);

完全なドキュメントはこちら: Ext.Tree.Panel reconfigure method

注:ドキュメントには、この方法は機能しないというコメントがありますが、ExtJS のバージョンは指定されていません。ドキュメントどおりに機能する前に、フレームワークの更新バージョンを待つ必要がある場合があります。

于 2011-11-03T17:54:45.743 に答える