Ember更新数组中的对象

时间:2013-12-18 11:44:31

标签: javascript ember.js handlebars.js

我有ArrayController data:[]属性和每个循环的模板。

当我这样做时

this.data.push({object})

数据数组已更新,但视图不是。

当我这样做时

this.data.pushObject({object})

数据数组已更新且视图也已更新(万岁)。

当我这样做时

this.data[0] = {new object}

数据数组已更新,但视图不是。

对于这种情况,pushObject的等价物是什么?

我找不到“updateObject”方法。有setObjects方法,但奇怪的是失败了。有些对象会更新,有些则不会。

对象如下:

{
    item: "item",
    array: [1, 2, 3, 4]
}

该项始终更新,并且数组并非总是如此。我已经嵌套了模板中的每个循环;这可能是个问题吗?

模板如:

{{#each data}}

    {{item}}

    {{foo}}

    {{#each array}}
        {{this}}
    {{/each}}

{{/each}}

我编辑的方式就像(在控制器中):

var itemToEdit = self.get('data')[0];
itemToEdit['array'] = [2, 3, 4, 5];

从全球来讲,问题是视图不会重新渲染。当我转到另一条路线然后回到当前路线时,所有更新都会正确呈现,并且我做了所有更新。

**进展情况: 当我做的时候

self.get('data').setEach('foo', Math.random());

在视图中正确设置和更新了foo属性...地球上的数组元素属性的“set”方法是什么?

1 个答案:

答案 0 :(得分:2)

您的每个对象都是纯JavaScript对象。您需要更改为Ember.Objects。而不是

this.data.pushObject({ foo: 'bar' })

你需要使用

this.data.pushObject(Ember.Object.create({ foo: 'bar' })).

需要Ember.Object,因此您可以使用set方法更新视图。