你在這裏混合了兩件事:綁定與觀察者不一樣。你不能綁定到@ @ each.name,你需要綁定到數組並觀察@each。綁定是2個值之間的連接,@each並不是一個真正的值,它是一種特殊的語法,用於告訴觀察者(或計算出的屬性依賴關係),您希望依賴於集合中每個元素的屬性。
另一個問題是,如果在設置值後添加觀察者,它將不會觸發,因爲該值已設置(即沒有更改)。在你的例子中,App.Person.find(1)立即返回對象,person.children也是這樣 - 它立即返回數組,它將在稍後填充數據。所以在你運行addObserver的時候,孩子已經被設置了,只有它的內容會被改變(這就是爲什麼長度觀察者會正確地觸發)。
下面是一些變化的小提琴:http://jsfiddle.net/drogus/6EVty/1/(我加observerPath和視圖插入後置人),代碼:
<script type="text/x-handlebars" data-template-name="main">
{{view App.SubView identifier="A" modelDataBinding="view.person.first"}}
{{view App.SubView identifier="B" modelDataBinding="view.person.children"}}
{{view App.SubView identifier="C" modelDataBinding="view.person.children" observePath="[email protected]"}}
{{view App.SubView identifier="D" modelDataBinding="view.person.children.length"}}
</script>
和視圖類:
SubView: Ember.View.extend({
init: function() {
this._super();
var observePath = this.get('observePath') || 'modelData';
this.addObserver(observePath, this, function() {
document.write('trigger ' + this.get('identifier') + ': ', this.get('modelData'), '<br />');
});
}
})
很好的解釋, 謝謝! – KOGI 2013-07-07 22:58:22