2013-05-20 11 views
2

我剛剛開始用燼,所以原諒我,如果這個問題似乎愚蠢。我有一個ArrayController,它擁有屬性名稱的人員列表。我使用下面的把手調用內容陣列中創建文本框爲每名:在Ember中如何在ArrayController內容被修改後更新視圖?

{{#each App.Controller}} 
{{view Em.TextField placeholder="Name" valueBinding="name" }} 
{{/each}} 

這個工作正常。我首先用幾個名字初始化我的內容數組,併爲每個條目顯示一個文本字段。但是,當我使用pushObject將人員添加到內容數組時,不會添加新的文本字段!使用控制檯我可以看到人們被添加到內容中,視圖根本不會改變。更奇怪的是,如果我按以下方式添加的一切人按預期工作:

this.pushObject(newPerson); 
var copy = this.get('content'); 
this.set('content',[]); 
this.set('content',copy); 

當我這樣,我又得到另一個文本字段爲新添加的人加人。該ember文檔說pushObject()是KVO兼容的,這並不意味着它應該更新依賴關係和視圖應該更新?我是否需要調用rerender()或其他函數來使pushObject()更新視圖,或者每次我想要更新視圖時,是否必須複製數組?謝謝!

+1

我認爲pushObject應該更新,你能爲你的情況提供一個小提琴,以便我們可以看到發生了什麼? –

+0

@未指定我找出問題所在。我在下面發佈我的解決方案我仍然不明白爲什麼它不能以原來的方式工作,但一旦文檔向我揭示了它的祕密,將會增加我的答案;) – ORL

回答

0

所以我想出了這個問題。在爲控制器我初始化函數,我簡單地將元素添加到內容數組這樣

App.Controller = Em.ArrayController.create({ 
content: [], 

init: function(){ 
    this.insertNew(); 
}, 


insertNew: function(){ 
    var t = App.Person.create({ 
     name:"test" 
    }); 
    this.pushObject(t); 
}, 

}); 

此代碼並沒有改變時insertNew被稱爲(儘管初始化工作)的看法。通過添加this.set(「content」,[])到我的init函數insertNew表現得如預期。這裏的工作代碼:

App.Controller = Em.ArrayController.create({ 
content: [], 

init: function(){ 
    this.set("content",[]); 
    this.insertNew(); 
}, 


insertNew: function(){ 
    var t = App.Person.create({ 
     name:"test" 
    }); 
    this.pushObject(t); 
}, 

}); 

我原以爲第一個內容:[]行意味着我沒有以後需要再次設置內容,但似乎初始化數組時,你必須重新設置它。

0

我遇到類似的問題,當我使用this.pushObject添加一個新項目時,視圖只會更新如果該項目是第一個對象。

後來我試了this.insertAt,它運行良好沒有任何問題。

相關問題