如何使用来自另一个树存储读取器的数据加载树存储

时间:2013-01-08 15:08:52

标签: extjs

我有几个树面板,每个面板配置有单独的树存储。我为一个商店配置了代理。在加载事件,我试图加载第二个商店(代理内存),如下所示。但是不起作用。

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":[]}]}

2 个答案:

答案 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);