我想你可以在你的 ArrayController 上定义一个计算属性:
isDirty : function(){
this.forEach(function(model){
var dirty = false;
if(model.get("isDirty"))
dirty = true;
});
return dirty;
}.property("content.@each.isDirty")
所以关键是属性依赖的正确声明。
更新评论中的有趣问题:为什么这个功能没有嵌入到 Ember 中?
关于您对烘焙功能的评论:您正在考虑 Ember 数据。我个人不将它与 ember-data 一起使用。所以在我的情况下,这个功能是无稽之谈。因此,可以讨论将其作为 Mixin 添加到 Ember 中,以便更多地促进集成。
例子:
Ember.IsArrayDirtyMixin = Ember.Mixin.create({
isDirty : function(){
this.forEach(function(model){
var dirty = false;
if(model.get("isDirty"))
dirty = true;
});
return dirty;
}.property("content.@each.isDirty")
});
App.YourController = Ember.ArrayController.extend(Ember.IsArrayDirtyMixin,{
.... // your stuff
});
// shorter version proposed by pjlammertyn in the comments
Ember.IsArrayDirtyMixin = Ember.Mixin.create({
isDirty : function(){
return !this.every(function (model) { return !model.get('isDirty'); });
}.property("content.@each.isDirty")
});