在我的应用程序模板中,我正在使用:
{{#if exampleModel.isDirty }}
{{else}}
{{/if}}
...根据 View 的模型是否为脏显示不同的Ui。这很好。
但是,我有另一个由ArrayController子类支持的 View 。同样,我想根据ArrayController中是否有任何脏项来更改UI。我努力了:
{{#if controller.isDirty }}
和
{{#if controller.content.isDirty }}
但是,尽管它们都不会生成异常,但是即使ArrayController子类中的Model脏了,也都不会在任何时候求真。
检查ArrayController装饰的模型是否脏的正确方法是什么?
最佳答案
我猜你可以在ArrayController上定义一个计算属性:
isDirty : function(){
this.forEach(function(model){
var dirty = false;
if(model.get("isDirty"))
dirty = true;
});
return dirty;
}.property("[email protected]")
因此,关键是属性依赖项的正确声明。
将更新为评论中有趣的问题:为什么此功能未纳入Ember?
关于您对烘焙功能的评论:您正在考虑使用 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("[email protected]")
});
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("[email protected]")
});
关于templates - 如何检查Ember中ArrayController的内容是否脏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15656012/