在sencha Touch中动态地将商品从商店加载到tabpanel

时间:2015-11-20 15:52:46

标签: javascript extjs sencha-touch

在Sencha touch应用程序中工作我在tabpanel中动态加载项目有问题。

视图中的代码:

{
                xtype   : 'tabpanel',
                layout  : 'card',
                itemId  : 'containerButtons',
                items   : []
}

控制器中的代码:

chooseBrands : function(store){
var item = {};
for(var i = 0; i <store.get('brands').length; i++){
  var record = store.get('brands')[i].text;
  var items = [item];
  console.log(i + ' ' + record);
  item = {
    title: record
  };
  items.push(item);
}
this.getSurveyBrands().setItems(items);

},

但是它没有正常工作,我重复了相同的记录,就像tabpanel中数组的长度一样..

此外,我在加载视图时调用此方法,其refs与事件initialize

我做错了什么?

提前谢谢。

我找到了解决方案:

chooseBrands : function(store){
    this.getSurveyBrands().removeAll();
    var item = {};
    for(var i = 0; i <store.get('brands').length; i++){
      var record = store.get('brands')[i].text;
      var items = [item];
      item = {
        title: record
      };
      this.getSurveyBrands().add(item);
    }
  },

1 个答案:

答案 0 :(得分:2)

错位

var item = {}

是个问题。它现在在哪里,它总是与修改标题的对象相同。这当然会修改所有“副本”的标题(一个对象只是指向某个记忆位置的指针)整个地方的“相同”对象。

如果在循环中创建item对象,它应该可以工作。

chooseBrands : function(store){
    var items=[];
    for(var i = 0; i <store.get('brands').length; i++){
      var record = store.get('brands')[i].text,
          item = {
            title: record
          };
      items.push(item);
    }
    this.getSurveyBrands().setItems(items);
}

但我建议使用map技巧保持代码非常简单:

chooseBrands: function(store) {
    this.getSurveyBrands().setItems(
        store.get('brands').map(function(brand) {
            return {title:brand.text};
        })
    );
}