Sencha Touch 2:从store.queryBy结果中加载一个List

时间:2013-12-06 21:58:33

标签: sencha-touch-2

我有一个List,当它直接绑定到商店时曾经工作但现在我希望该列表从原始商店的queryBy获取它的数据。

查看文档看起来像setItems应该做我想要的。

var myStore = Ext.getStore('myStoreData');
var myData = myStore.queryBy(function(item) {
    return item.get('status') !== null;
});

// At this point myData looks valid and has the data I want.
// Ext.apply.create.Class {all: Array[5], items: Array[5], keys: Array[5], indices: Object, map: Object…}

Ext.getCmp('myListComponent').setItems(myData.items);

我一直收到错误"对象[object object]没有方法' getItemId'"。我尝试了其他各种咒语但没有成功。我还看了一下setData并添加但没有成功。

========================

在得到Thiem的回答之后,我最终创建了一个函数,该函数将创建现有商店的过滤副本,然后将List商店设置为该商店。以下代码用于其他人的启发......

  storeCopy: function(store, filterBy) {
      var records = [];

      var allRecords = null;
      if(filterBy)
          allRecords= store.queryBy(filterBy);
      else
          allRecords= store.queryBy(function(){return true;});

      allRecords.each(function(r){
          var rec = r.copy();
          rec.setId(r.getId());
          records.push(rec);
      });
      var store2 = new Ext.data.Store({
          recordType: store.recordType
      });
      store2.add(records);
      return store2;
  },

谢谢大家。

1 个答案:

答案 0 :(得分:0)

setItems方法完全不同。例如,假设您有Ext.Container,其中包含表单,某些字段和一些交互按钮。这些东西是调用容器的子组件。它们通常在父容器的items配置中声明,而setItems旨在以编程方式设置该配置的值。所以它与商店逻辑无关。

在您的情况下,这是解决方案之一:

  • 创建包含已过滤数据的商店实例。
  • 使用此命令:yourList.setStore('yourFilteredStore')

它应该重新加载...希望这有帮助