ObjectController и ArrayController


Я учусь. emberjs форма trek.github.com . в этом учебнике использовались как Em.ObjectController, так и Em.ArrayController. И есть еще Em.Controller.

Я в замешательстве, когда их использовать, я думаю, что Em.ObjectController для одного объекта, Em.ArrayController для массива и Em.Controller только для ApplicationController.

Есть ли какое-нибудь благословенное правило для того, когда и что использовать?
2 8

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.