在我的应用程序模板中,我正在使用:

  {{#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/

10-11 21:13