在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);
}
},
答案 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};
})
);
}