В SproutCore, это распространенный способ связать ListView.content к ArrayController:SproutCore Смешение в Binding 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
@merlin Я на самом деле понятия не имею; это либо то же самое, что привязка к '.arrangedObjects', либо привязка к' .content'. По какой-то причине я думаю, что это '.content', но я мог ошибаться. –
Да, привязка к 'Todos.todosController.arrangedObjects' такая же, как привязка к' Todos.todosController', поскольку 'organizObjects' просто возвращает' this'. Но привычка привязываться к 'assemblyObjects' позволяет вам переписать свойство' builtObjects' в нечетных случаях, в которых вы нуждаетесь.Это также очень ясно говорит о ваших намерениях. Привязка к «содержимому» контроллера приведет к поражению цели использования контроллера, поскольку он полностью обходит его. – geoffreyd