我正在尝试在EXTJ中创建一个包含两个主要组件的网页:


表格(Ext.form.Panel)
面板(外部树面板)


该窗体应该获得一些值,该值应填充第二个面板中的树。在第一个面板的按钮处理程序中,我可以访问更新的JSON对象,但是无法找到刷新TreeStore的方法来更新tree.Panel中的显示。

这是我到目前为止所拥有的:

Ext.define('TreeServiceData',{
    config:{
    data : ''
    },print : function() {
    console.log("Printing data: ")
    console.log(this.data.children[0])
    }
});
var dataObject = Ext.create('TreeServiceData');
dataObject.setData({'expanded':false,'children':[{'text':'Master','expanded':true,'leaf':false,'children':[{'text':'Child 1','expanded':true,'leaf':false,'children':[{'text':'Child 2','expanded':true,'leaf':false,'children':[{'text':'Child 3','expanded':false,'leaf':false}]}]}]}]})


Ext.define('TreeStoreData',{
    extend: 'Ext.data.TreeStore',
    model: 'TaskModel',
    autoLoad: true,
    autoSync: true,
    proxy: {
        type:'memory',
        reader: {
            type:'json'
        }
    },
    root:dataObject.getData()
});

var treeStore = Ext.create('TreeStoreData');


现在,我尝试在看起来像这样的按钮调用上更新并显示此树存储的值:

buttons:[
{
    text:'Get CCP/Product',
    handler:function (btn, evt) {
        dataObject.print();
        treeStore.removeAll();
        dataObject.setData({'expanded':false,'children':[{'text':'Master11','expanded':true,'leaf':false,'children':[{'text':'Child 12','expanded':true,'leaf':false,'children':[{'text':'Child 23','expanded':true,'leaf':false,'children':[{'text':'Child 34','expanded':false,'leaf':false}]}]}]}]})
        dataObject.print();

    }
}
]


但是在此按钮处理程序上,我总是在treeStore.removeAll()方法上收到“未捕获的TypeError:无法调用未定义的方法'indexOf'”,在该上下文中明确定义了树存储。

问题1)刷新TreeStore的正确方法是什么?

最佳答案

答案1)

代替:

treeStore.removeAll();
dataObject.setData( ... );


你应该做:

dataObject.setData( ... ); // This won't affect the store
treeStore.setRootNode(dataObject.getData()); // Actually update the store


请注意,更改dataObject的数据不会像您似乎认为的那样自动影响存储。

09-18 08:12