2012-09-26 14 views
8

Estoy aprendiendo emberjs formulario trek.github.com. Ese tutorial usó ambos Em.ObjectController y Em.ArrayController. Y también está Em.Controller.ObjectController y ArrayController

Estoy confundido cuando los uso, supongo que Em.ObjectController es para un solo objeto, Em.ArrayController es para una matriz y Em.Controller es solo para ApplicationController.

¿Existe alguna regla bendecida para cuándo usarla?

Respuesta

13

Por lo general, si su Controlador representa una lista de elementos, usaría el Ember.ArrayController, y si el controlador representa un solo elemento, usaría el Ember.ObjectController. Algo parecido a lo siguiente:

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

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

Luego, en su Ember.Router (si se utilizan), que conectaría los dos dentro de la función connectOutlets:

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

Editar: Nunca he usado el Ember.Controller. Al mirar el código fuente, parece que podría querer utilizarlo si está construyendo un controlador personalizado que no se ajusta con los otros dos controladores.

+4

Según tengo entendido, utiliza 'Ember.Controller' cuando el controlador no es un proxy (ni para un objeto ni para una matriz) como en el caso de su' App.ApplicationController'. – dechov

+0

Joachim pauldechov ¡Gracias por su respuesta! Ahora sé la diferencia de ellos. – xnjiang

0

La regla general es que depende del modelo de la ruta.

Si el modelo es una matriz, entonces debe usar ArrayController. Le permitirá implementar de manera sencilla la clasificación o el filtrado en el futuro. ArrayController se conecta normalmente a ObjectControllers.

Cuando su modelo es una instancia de Ember Object, debe usar ObjectController. Se lleva a cabo cuando se utilizan, por ejemplo, datos de aserraderos. Con Objectcontroller puede acceder directamente a las propiedades del modelo. No tiene que escribir model.property cada vez.

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

My name is {{name}} 

Finalmente, cuando uno no tiene modelo no es una situación ideal para utilizar solo Ember.Controller. No va a permitir el acceso directo a las propiedades del modelo como ObjectController.

Cuestiones relacionadas