【问题标题】:How to load tree store with data from another tree store reader如何使用来自另一个树存储阅读器的数据加载树存储
【发布时间】:2013-07-06 19:45:10
【问题描述】:

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

扩展版本: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":[]}]}

【问题讨论】:

    标签: extjs


    【解决方案1】:

    不要使用原始 Json 数据,而是尝试将“记录”参数从负载侦听器传递到另一个 Store。所以是这样的:

    listeners: {
        load: function(store, records) {
            _treeStore2.setRootNode.setRootNode(records);
        } 
    }
    

    【讨论】:

      【解决方案2】:

      试试这个:

      /**
       * 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-01
        • 1970-01-01
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多