templates - 我应该如何检查 Ember 中 ArrayController 的内容是否脏

标签 templates ember.js model ember-data

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

  {{#if exampleModel.isDirty }}

  {{else}}

  {{/if}}

... 根据 View 的模型是否脏显示不同的用户界面。这很好用。

然而,我有另一个 View 由 ArrayController 子类支持。同样,我想根据 ArrayController 中是否有任何脏项来更改 UI。我试过:

{{#if controller.isDirty }}

{{#if controller.content.isDirty }}

但是虽然两者都不会产生异常,但在任何时候都不会计算为真,即使 ArrayController 子类中的模型是脏的。

检查由 ArrayController 修饰的模型是否脏的正确方法是什么?

最佳答案

我猜你可以在 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")
});

关于templates - 我应该如何检查 Ember 中 ArrayController 的内容是否脏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15656012/

相关文章:

c++ - 将 const 添加到函数模板指针参数

c++ - Qt模板DLL "function marked as dllimport"

javascript - 可排序列表不会排序(jQuery/Javascript)

javascript - 我如何在 Ember.js 呈现之前修改页面?

java - JTable - AutoRowSorter - getColumnClass - 不工作

python - Django 中的模板不存在

javascript - 将新日期推送到 ember javascript 数组

javascript - 在 Ember 2.16 中创建利用 window.confirm() 的集成测试?

laravel - 如何使用另一个有关系的表中的数据(user_id)从用户表中检索用户名

ruby-on-rails - Rails 中的两列不能彼此相等