我有几个树面板,每个面板配置有单独的树存储。我为一个商店配置了代理。在加载事件,我试图加载第二个商店(代理内存),如下所示。但是不起作用。
Ext版本:4.0.7
_treeStore2 = Ext.create('Ext.data.TreeStore', {
model: 'Scenario',
proxy : {
type : 'memory'
}
});
_treeStore1 = Ext.create('Ext.data.TreeStore', {
model: 'Scenario',
root:'data1',
proxy : {
type : 'ajax',
url: '/proj/examples?id='+_Id,
reader : {
type : 'json',
root:'data1'
}
},
listeners: {
'load': {
fn: function(store, records, success, operations) {
_treeStore2.setRootNode(_treeStore1.getProxy().getReader().jsonData.data2);
}
}
});
示例JSON数据:
{"data1":[{"name":"value","children":[]}],"data2": [{"name":"value","children":[]}]}
答案 0 :(得分:0)
不要使用原始Json数据,而是尝试将“records”参数从加载侦听器传递到另一个Store。所以像这样:
listeners: {
load: function(store, records) {
_treeStore2.setRootNode.setRootNode(records);
}
}
答案 1 :(得分:0)
试试这个:
/**
* Because of a bug in Ext.data.NoteInterface in ExtJs < 4.1.3
* we have to do deep cloning.
*/
var clone = function(node) {
var result = node.copy(),
len = node.childNodes ? node.childNodes.length : 0,
i;
// Move child nodes across to the copy if required
for (i = 0; i < len; i++)
result.appendChild(clone(node.childNodes[i]));
return result;
};
var oldRoot = store1.getRootNode(),
newRoot = clone(oldRoot);
store2.setRootNode(newRoot);