Hy,感谢阅读:
我遇到了Ember.ArrayController和arrangeContent的问题。 Senario如下:
我的arrayController中的项目可以通过某些操作进行修改。 我的arrangeContent在其中一些项属性上被过滤。 因此,如果观察到的项属性更改,则应刷新arrangeContent属性
我通过使用property()
"content.@each.myproperty"
来实现此目的
一切正常,除非我尝试从路线刷新模型,然后收到错误消息TypeError: Cannot read property 'destroy' of undefined
at ContainerView.extend.arrayWillChange
在某些情况下,它会起作用,但每次触发refresh()时都会复制内容
使用一些最小的代码可能会变得更加清晰......
App.IndexRoute = Ember.Route.extend({
model : function(){
return [App.Cars.create({color : "red", model : "march"}),
App.Cars.create({color : "yellow", model : "alto"}),
App.Cars.create({color : "blue", model : "gundam"}) ];
},
actions : {
reload : function(){
this.refresh();
}
}
});
App.IndexController = Ember.ArrayController.extend({
arrangedContent : function(){
var data= this.get("content");
data=data.filter(function(elem){
return elem.get("color").match(new RegExp("el","gi"))!==null;
});
return data;
}.property("lenght","content.@each.color"),
actions : {
allYell :function(){
this.get("content").forEach(function(elem){
elem.set("color","yellow");
});
},
erase : function(){
if(this.get("length")>0){
this.get("content").removeAt(0);
}
}
}
});
可以在这里找到一个JSBin http://jsbin.com/yebopobetu/3/edit?html,js,console,output
答案 0 :(得分:1)
我从未见过有人建议覆盖arrangedContent
。老实说,我不推荐它。
App.IndexController = Ember.ArrayController.extend({
foos : function(){
var data= this.get("model");
return data.filter(function(elem){
return elem.get("color").match(new RegExp("el","gi"))!==null;
});
}.property("@each.color"),
actions : {
allYell :function(){
this.forEach(function(elem){
elem.set("color","yellow");
});
},
erase : function(){
if(this.get("length")>0){
this.removeAt(0);
}
}
}
});