在SproutCore的,它是對ListView.content綁定到ArrayController的常用方法:SproutCore的混淆在綁定的ListView內容到ArrayController
Todos.todosController = SC.ArrayController.create({
});
SC.ListView.design({
contentBinding: SC.Binding.oneWay('Todos.todosController'),
exampleView: SC.CheckboxView.design({
..........
})
})
但是ListView中的哪個從SC.CollectionView延伸「內容」字段是SC.Array,不應該是:
contentBinding: SC.Binding.oneWay('Todos.todosController.content')
任何解釋將不勝感激。對不起英文不好。
@TopherFangio我看着SC.ArrayController
實施和找出.arrangedObjects
是返回的對象屬於一個非常簡單的計算屬性:
arrangedObjects: function() {
return this;
}.property().cacheable()
所以結合實際.arrangeObjects
是一樣的結合:App.arrayController.arrangeObjects
我也發現SC.ArrayController
擴展SC.Array
並實現了兩個所需的方法'replace()'和'objectAt()'。
要在您自己的類中支持SC.Array,您必須重寫兩個使用它的基元:replace()和objectAt()。
在SC.ArrayController
中執行這兩個方法會執行一些特定於數組控制器的特定檢查並將請求轉發給.content
屬性。
所以就像@TopherFangio所說的,SC.ArrayController
是它的底層.content
屬性的代理。如果我直接綁定到App.arrayController.content
而不是控制器本身,我想我會失去所有的arrayController善良。
再次感謝您的大力幫助@TopherFangio。
謝謝你的解釋。事實證明,我沒有仔細閱讀文檔。所以實際綁定到Todos.todosController就和綁定到Todos.todosController.arrangedObjects一樣? – merlin 2012-04-19 01:40:50
@merlin我其實不知道;它可以與綁定到'.arrangedObjects'或綁定到'.content'相同。出於某種原因,我認爲這是'.content',但我可能會誤解。 – 2012-04-19 18:54:45
對'Todos.todosController.arrangedObjects'的綁定與對'Todos.todosController'的綁定是一樣的,因爲'arrangeObjects'剛剛返回'this'。但是習慣於綁定''''''''''''''''''''''''''''''''''''''可以在你需要的奇怪場合覆蓋'這也說明了你的意圖。綁定到控制器的「內容」會挫敗使用控制器的目的,因爲它完全繞過控制器。 – geoffreyd 2012-05-16 00:26:20