我有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”方法是什么?
答案 0 :(得分:2)
您的每个对象都是纯JavaScript对象。您需要更改为Ember.Objects
。而不是
this.data.pushObject({ foo: 'bar' })
你需要使用
this.data.pushObject(Ember.Object.create({ foo: 'bar' })).
需要Ember.Object
,因此您可以使用set方法更新视图。