2012-09-26 2 views
8

Ich lerne emberjs Formular trek.github.com. Dieses Tutorial verwendete sowohl Em.ObjectController als auch Em.ArrayController. Und es gibt auch Em.Controller.ObjectController und ArrayController

Ich bin verwirrt, wenn Sie sie verwenden, ich denke Em.ObjectController ist für einzelnes Objekt, Em.ArrayController ist für Array und Em.Controller ist nur für ApplicationController.

Gibt es eine gesegnete Regel für wann wann welche verwenden?

Antwort

13

Normalerweise, wenn Ihr Controller eine Liste von Elementen darstellt, würden Sie die Ember.ArrayController verwenden, und wenn der Controller ein einzelnes Element darstellt, würden Sie die Ember.ObjectController verwenden. So etwas wie die folgenden:

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

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

Dann in Ihrem Ember.Router (wenn Sie sie verwenden), würden Sie die beiden in der connectOutlets Funktion verbinden:

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

Edit: Ich habe nie verwendet haben die Ember.Controller. Wenn Sie sich den Quellcode ansehen, scheint es, als wollten Sie diesen verwenden, wenn Sie einen benutzerdefinierten Controller erstellen, der nicht zu den beiden anderen Controllern passt.

+4

Mein Verständnis ist, dass Sie 'Ember.Controller' verwenden, wenn der Controller kein Proxy ist (weder für ein Objekt noch für ein Array) wie im Falle Ihrer' App.ApplicationController'. – dechov

+0

Joachim Pauldechov Danke für Ihre präzise Antwort! Jetzt kenne ich den Unterschied von ihnen. – xnjiang

0

Die allgemeine Regel ist, dass es vom Modell aus der Route abhängt.

Wenn das Modell ein Array ist, sollten Sie ArrayController verwenden. Es wird Ihnen ermöglichen, in Zukunft einfach zu sortieren oder zu filtern. ArrayController verbindet normalerweise ObjectControllers.

Wenn Ihr Modell eine Instanz von Ember Object ist, sollten Sie ObjectController verwenden. Sie findet statt, wenn Sie beispielsweise Glutendaten verwenden. Mit Objectcontroller können Sie direkt auf Modelleigenschaften zugreifen. Sie müssen nicht jedes Mal model.property schreiben.

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

My name is {{name}} 

Schließlich, wenn man nicht Modell hat es eine ideale Situation Ember.Controller nur zu verwenden. Es wird keinen direkten Zugriff auf Modelleigenschaften als ObjectController ermöglichen.

Verwandte Themen