6

我正在使用 Ext.data.Store 的each()。但是这种方法,当 store 被过滤时,只会循环过滤的记录。即使在商店上应用了过滤器,我们是否还有其他方法或解决方法来遍历商店的所有记录。

  var attStore = Ext.getStore("myStore");
        var allRecords = attStore.snapshot || attStore.data;
        allRecords.each(function (record) {
            if (record.data.IsUpdated) {
                record.set('updatedByUser', true);
            }
            else {
                record.set('updatedByUser', false);
            }
             record.commit();
        });

该行 var allRecords = attStore.snapshot || attStore.data;实际上按预期返回了所有记录,但是当我尝试更新该记录(或使用 record.data.property = something 更新该记录中的属性之一)时,该记录没有得到更新。

谢谢

4

5 回答 5

12

用这个

var allRecords = store.snapshot || store.data;

像这样循环

allRecords.each(function(record) {
    console.log(record);
});

查看此商店快照

于 2013-10-17T13:25:15.133 回答
5

在 Sencha Touch 2.3 上,我需要执行以下操作来绕过过滤器。

var allRecords = store.queryBy(function(){return true;});

allRecords.each(function(r){
    doStuff();
});
于 2013-12-06T14:49:06.173 回答
3

从 Extjs 5 开始使用以下

Ext.data.Store.each( fn, [scope], [includeOptions] )

IE

store.each(function(record) {
    // ...
}, scope, {filtered: true});
于 2015-10-26T12:24:16.497 回答
2
//  Here's how you can do that ...

    myStore.each(function(record)  
    {  
      record.fields.each(function(field) 
      { 
        var fieldValue = record.get(field.name);       
      }); 

    // Alternatively... 
    /*     
      for (var rd in record.data) 
      { 
        var fName = rd; 
        var fValue = record.data[rd]; 
      } 
    */ 
    }, this);  
于 2014-11-12T12:02:31.920 回答
0

您可以使用 getStore().getDataSource().each(function (r) {}); 获取所有数据甚至存储的功能

于 2018-12-06T10:52:14.883 回答