2012-09-26 9 views
8

Uczę się emberjs formularza trek.github.com. Ten samouczek używał zarówno Em.ObjectController, jak i Em.ArrayController. Jest też Em.Controller.ObjectController i ArrayController

Jestem zdezorientowany, kiedy ich używać, myślę Em.ObjectController jest dla pojedynczego obiektu, Em.ArrayController jest do tablicy i Em.Controller jest właśnie dla ApplicationController.

Czy istnieje jakaś błogosławiona zasada, kiedy używać?

Odpowiedz

13

Zwykle, jeśli kontroler reprezentuje listę pozycji, należy użyć wartości Ember.ArrayController, a jeśli kontroler reprezentuje pojedynczy element, należy użyć wartości Ember.ObjectController. Coś jak następuje:

MyApp.ContactsController = Ember.ArrayController.extend({ 
    content: [], 
    selectedContact: null 
}); 

MyApp.SelectedContactController = Ember.ObjectController.extend({ 
    contentBinding: 'contactsController.selectedContact', 
    contactsController: null 
}); 

Następnie w Ember.Router (jeśli ich używać), by połączyć te dwa wewnątrz funkcji connectOutlets:

connectOutlets: function(router) { 
    router.get('selectedContactController').connectControllers('contacts'); 
} 

EDIT: I nigdy nie używane Ember.Controller. Patrząc na kod źródłowy, wydaje się, że możesz go użyć, jeśli budujesz niestandardowy kontroler, który nie pasuje do dwóch innych kontrolerów.

+4

Rozumiem, że używasz 'Ember.Controller', gdy kontroler nie jest proxy (ani dla obiektu, ani dla tablicy), tak jak w przypadku' App.ApplicationController'. – dechov

+0

Joachim pauldechov Dzięki za dokładną odpowiedź! Teraz znam ich różnicę. – xnjiang

0

Ogólna zasada jest taka, że ​​zależy to od modelu trasy.

Jeśli model jest tablicą, należy użyć ArrayController. Pozwoli ci to w łatwy sposób przeprowadzić sortowanie lub filtrowanie w przyszłości. ArrayController łączy zwykle obiekty ObjectController.

Kiedy twój model jest instancją obiektu Ember, powinieneś użyć ObjectController. Ma to miejsce, gdy używasz na przykład danych embera. Dzięki Objectcontroller możesz bezpośrednio uzyskać dostęp do właściwości modelu. Za każdym razem nie musisz pisać model.property.

App.ApplicationRoute = Ember.Route.extend({ 
    model: function() { 
     return Ember.Object.create({name: 'Mathew'}); 
    } 
}); 

My name is {{name}} 

Wreszcie, kiedy nie ma modelu jest to sytuacja idealna do wykorzystania tylko Ember.Controller. Nie pozwoli na bezpośredni dostęp do właściwości modelu jako ObjectController.

Powiązane problemy