如何在 ExtJS 3.4 中添加/合并多个 Ext.data.JsonStore

Posted

技术标签:

【中文标题】如何在 ExtJS 3.4 中添加/合并多个 Ext.data.JsonStore【英文标题】:How to add/merge multiple Ext.data.JsonStore together in ExtJS 3.4 【发布时间】:2014-09-09 20:26:44 【问题描述】:

我想将多个 Ext.data.JsonStore 和数组数据添加/合并到单个 Ext.data.JsonStore。

代码下方-

Store1: function (s) 
         var tmp = [];
         var store = new Ext.data.JsonStore(
             autoDestroy: true,
             url: 'url1,
             root: 'rows', 
             listeners: 
                 load: 
                     fn: function (store, records, options) 
                         store.data.each(function (item, index, totalItems) 
                             tmp.push([item.data.Index, item.data.Method]);
                         );
                         s.loadData(tmp);
                     
                 
             ,
             fields: ['Index','Method']
         );
         store.load();
     ,
Store2: function (s) 
             var tmp = [];
             var store = new Ext.data.JsonStore(
                 autoDestroy: true,
                 url: 'url2,
                 root: 'rows', 
                 listeners: 
                     load: 
                         fn: function (store, records, options) 
                             store.data.each(function (item, index, totalItems) 
                                 tmp.push([item.data.ID, item.data.Type]);
                             );
                             s.loadData(tmp);
                         
                     
                 ,
                 fields: ['ID', 'Type']
             );
             store.load();
         ,

Store3: function () 
             var tmpGuests = [];
             var partyInfo = Ext.getCmp('party-tree');

         var parties = partyInfo.root.childNodes;

         Ext.each(parties, function (party) 
             Ext.each(party.childNodes, function (guest) 
                 tmpGuests.push([guest.id, guest.text]);
             , this);
         , this);

         return tmpGuests;
     

并像这样尝试过 -

AllStore: function (s) 
         var tmp = [];
         var storeTest;
         storeTest = new Ext.data.JsonStore(
             autoDestroy: true,
             url: 'Url1,
             root: 'rows', 
             listeners: 
                 load: 
                     fn: function (store, records, options) 
                         store.data.each(function (item, index, totalItems) 
                             tmp.push([item.data.Index, item.data.Method]);
                         );
                         s.loadData(tmp);
                         Store2.loadData(records, true);
                     
                 ,
             ,
             fields: ['ID', 'Type']
         );
         storeTest.load();
     

这不起作用,我还需要添加数组数据(Store3)。这怎么可能?

我正在使用 extJS 3.4

【问题讨论】:

【参考方案1】:

不确定您的解决方案应该有多强大,但您应该能够利用 add 和 getRange 方法。

假设所有商店都已加载,您可以执行以下操作:

var allStore = new Ext.data.JsonStore();
allStore.add(store1.getRange());
allStore.add(store2.getRange());
//..

如果它们尚未加载,您可以使用通用侦听器添加它们,如下所示:

var allStore = new Ext.data.JsonStore(),
    addToAllStore = function(store) 
        allStore.add(store.getRange());
    

    store1.on('load', addToAllStore);
    store2.on('load', addToAllStore);
    store3.on('load', addToAllStore);

【讨论】:

+1 虽然您可能希望在加载事件添加一次后取消对其进行监控。 @karlipoppins 如果业务逻辑需要,您可以随时将single:true 添加到侦听器选项中。

以上是关于如何在 ExtJS 3.4 中添加/合并多个 Ext.data.JsonStore的主要内容,如果未能解决你的问题,请参考以下文章

Extjs 3.4 同值合并

ExtJS 3.4 在网格底部添加按钮

extjs 3.4 如何动态添加复选框到工具栏

extjs 3.4 在字段中添加工具提示

ExtJS (3.4):更新 TabPanel 中面板的工具提示

Extjs 3.4 Ext.tree.TreePanel 与 TreeLoader