在 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
我还发现SC.ArrayController扩展SC.Array并实现了两个必需的方法“replace()”和“objectAt()”。
要在您自己的类中支持 SC.Array,您必须重写两个原语才能使用它:replace() 和 objectAt()。
这两个方法的实现SC.ArrayController将做一些数组控制器特定的检查并将请求转发到.content属性。
因此,就像@TopherFangio 所说的那样,SC.ArrayController它是其基础.content属性的代理。如果我直接绑定到App.arrayController.content而不是控制器本身,我想我将失去所有 arrayController 的优点。
再次感谢您的大力帮助@TopherFangio。