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.