如何更改数组中的任何项目时如何更新Ember计算属性?

时间:2014-06-15 21:05:05

标签: javascript ember.js

我们说我有以下数据:

[
  { id: "54101", name: "A\1" },
  { id: "cbbb4", name: "A\2" },
  { id: "b4e37", name: "B\1" },
  { id: "ff099", name: "B\2" },
  { id: "8715f", name: "B\3" },
  { id: "1f414", name: "C\1\a" },
  { id: "77ba6", name: "C\1\b" }
]

通过我路线中的承诺加载。

我想拥有一个名为rootNode的属性,它具有以下结构:
(我已经有了使用POJO执行此操作的代码,因此可以忽略转换此对象所需的逻辑)

{
  name: null,
  value: null,
  children: [
    {
      name: "A",
      value: null,
      children: [
        { name: "1", value: /* object above */, children: [] },
        { name: "2", value: /* object above */, children: [] }
      ]
    },
    {
      name: "B",
      value: null,
      children: [
        { name: "1", value: /* object above */, children: [] },
        { name: "2", value: /* object above */, children: [] },
        { name: "3", value: /* object above */, children: [] }
      ]
    },
    {
      name: "C",
      value: null,
      children: [
        {
          name: "1",
          value: null,
          children: [
            { name: "a", value: /* object above */, children: [] },
            { name: "b", value: /* object above */, children: [] }
          ]
        }
      ]
    }
  ]
}

使用Ember,是否可以创建一个计算属性,只要任何名称发生更改,或者添加或删除项目,都会更新此树?

我现在已经18小时都在使用Ember,而且我有点迷失了。我已经使用Angular的$watch功能实现了这一功能,但由于其他方面的限制,我不得不离开Angular。

1 个答案:

答案 0 :(得分:5)

您可以使用@each

Ember.computed('myArrayProp.@each.somePropToObserve', function() {
  /* your code here */
})