2013-12-18 47 views
0

我有一個ArrayControllerdata:[]屬性和模板與每個循環。Ember更新數組中的對象

當我

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的屬性正確設置和更新的觀點......凡在地球上是一個數組元素的屬性「設置」的方法?

回答

2

您的每個對象都是普通的JavaScript對象。您需要更改爲Ember.Objects。取而代之的

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

你需要使用

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

Ember.Object是neeeded,這樣你就可以使用set方法,以更新的意見。

+0

這不是我想要做的。 insertAt將在我的數組中插入一個對象;我已經有了我需要的所有項目,現在我想更新它們。替換方法看起來很有趣,但它不起作用,原因我還不明白 – fabien

+0

對不起,我以爲你想要一個'this.data [0]'版本來觀察變化。你能否更新你的問題來顯示你如何將數據發送到模板,模板本身以及如何更改數據? –

+0

我已經做了一些編輯 – fabien