ObjectController и ArrayController
Я учусь. emberjs форма trek.github.com . в этом учебнике использовались как Em.ObjectController, так и Em.ArrayController. И есть еще Em.Controller.
Я в замешательстве, когда их использовать, я думаю, что Em.ObjectController для одного объекта, Em.ArrayController для массива и Em.Controller только для ApplicationController.
2 ответа:
Обычно, если ваш контроллер представляет список элементов, вы используете
Ember.ArrayController, а если контроллер представляет один элемент, вы используетеEmber.ObjectController. Что-то вроде следующего:MyApp.ContactsController = Ember.ArrayController.extend({ content: [], selectedContact: null }); MyApp.SelectedContactController = Ember.ObjectController.extend({ contentBinding: 'contactsController.selectedContact', contactsController: null });Затем в вашем
Ember.Router(Если вы используете их), вы соедините их внутри функцииconnectOutlets:connectOutlets: function(router) { router.get('selectedContactController').connectControllers('contacts'); }Edit: я никогда не использовал
Ember.Controller. Глядя на исходный код, кажется, что вы можете использовать это, если вы создаете пользовательский контроллер, который не вписывается в эти два другие контроллеры.
Общее правило состоит в том, что она зависит от модели от маршрута.
Если модель является массивом, то вы должны использовать ArrayController. это позволит вам легко реализовать сортировку или фильтрацию в будущем. ArrayController обычно подключает ObjectControllers.
Если ваша модель является экземпляром объекта Ember, то вы должны использовать ObjectController. это происходит, когда вы используете, например, данные ember. С помощью Objectcontroller вы можете получить доступ к свойствам модели непосредственно. Вам не нужно писать
model.propertyкаждый раз.App.ApplicationRoute = Ember.Route.extend({ model: function() { return Ember.Object.create({name: 'Mathew'}); } }); My name is {{name}}Наконец, когда у кого-то нет модели, есть идеальная ситуация, чтобы использовать просто
Ember.Controller. Он не будет разрешать прямой доступ к свойствам модели в качестве ObjectController.