Контроллеры должны быть просто прокси для объектов при работе с отдельными экземплярами вашей модели.Другими словами, ObjectController может прокси-сервер что угодно.Вот что я имею в виду в коде:
У вас есть два объекта, Person и Student.
App.Person = SC.Object.extend({
// person stuff here
})
App.Student = App.Person.extend({
// student stuff here, you have have all Person things because you are extending person.
})
Затем вы хотите определить контроллеры:
App.personController = SC.ObjectController.create({
contentBinding: 'App.path.to.person'
})
App.studentController = SC.ObjectController.create({
contentBinding: 'App.path.to.student'
})
обратите внимание, чтовы бы связали контент контроллера только с чем-то, если человек / ученик является результатом выбора или какого-то другого потока, где срабатывает привязка.Другими словами, если вы установите человека вручную (скажем, из диаграммы состояний, как результат взаимодействия), вы все равно определите контроллер, но выполните:
App.personController.set('content', person);
Вы настраиваете контроллер по-разному в зависимости отявляется ли Person объектом верхнего уровня в вашем приложении или каким-либо промежуточным объектом, который выбирается.Кроме того, вам может понадобиться только один контроллер, у вас будут только studentController и personController, если вы действуете на человека и студента одновременно.Оба являются просто ObjectControllers, и они могут прокси-что угодно.
Наконец, на ваш взгляд, вы бы связали соответствующий элемент представления с контроллером:
...
nameView: SC.LabelView.design({
layout: {/* props */},
valueBinding: SC.Binding.oneWay('App.personController.name')
})
...
обратите внимание, что односторонняя привязка заключается в том, что если имя не будет изменено в представлении, если представление может изменить имя, просто выполните обычную привязку.Также обратите внимание на путь здесь.Я не привязываюсь к
'App.personController.content.name'
Поскольку personController проксирует объект, вы привязываетесь к
'namespace.controller.property-on-object-controller-proxies'
Если вы помещаете много бизнес-логики в свой контроллер, вы делаетеэто неправильно.Контроллеры должны быть только для прокси-объектов (по крайней мере, ObjectControllers).Бизнес-логика должна быть на самих моделях, а логика принятия решений должна быть в диаграммах состояний.