SproutCore では、ListView.content を ArrayController にバインドするのが一般的な方法です。
Todos.todosController = SC.ArrayController.create({
});
SC.ListView.design({
contentBinding: SC.Binding.oneWay('Todos.todosController'),
exampleView: SC.CheckboxView.design({
..........
})
})
しかし、SC.CollectionView から拡張された ListView の「コンテンツ」フィールドは SC.Array です。
contentBinding: SC.Binding.oneWay('Todos.todosController.content')
任意の説明をいただければ幸いです。下手な英語でごめんなさい。
@TopherFangioの実装を調べたところ、それが属するオブジェクトを返す非常に単純な計算されたプロパティであることがSC.ArrayController
わかりました。.arrangedObjects
arrangedObjects: function() {
return this;
}.property().cacheable()
したがって、へのバインディング.arrangeObjects
は、実際には次へのバインディングと同じです。App.arrayController.arrangeObjects
また、必要な 2 つのメソッド「replace()」と「objectAt()」SC.ArrayController
が拡張および実装されていることもわかりました。SC.Array
独自のクラスで SC.Array をサポートするには、replace() と objectAt() の 2 つのプリミティブをオーバーライドして使用する必要があります。
これら 2 つのメソッドを実装するとSC.ArrayController
、アレイ コントローラー固有のチェックが行われ、要求が.content
プロパティに転送されます。
@TopherFangioが言ったように、それはその基礎となるプロパティSC.ArrayController
のプロキシです。.content
コントローラー自体ではなく直接バインドするとApp.arrayController.content
、arrayController のすべての利点が失われると思います。
@TopherFangioの多大なご協力に改めて感謝いたします。