2012-09-26 35 views
8

我在学习emberjs表格trek.github.com。该教程同时使用了Em.ObjectControllerEm.ArrayController。而且还有Em.ControllerObjectController和ArrayController

我很困惑何时使用它们,我猜Em.ObjectController是针对单个对象的,Em.ArrayController是针对数组的,Em.Controller针对的是ApplicationController。

有什么时候使用哪些有福的规则?

回答

13

通常,如果您的控制器代表项目列表,您可以使用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'); 
} 

编辑:我从来没用过Ember.Controller。看看源代码,如果你正在构建一个不适合其他两个控制器的自定义控制器,你可能会想使用它。

+4

我的理解是,当控制器不是代理时(对象或数组都不是),就像'App.ApplicationController'一样使用'Ember.Controller'。 – dechov

+0

Joachim pauldechov感谢您的精确回复!现在我知道他们的区别。 – xnjiang

0

一般规则是它取决于路线模型。

如果model是一个数组,那么您应该使用ArrayController。它将允许您在未来轻松实现排序或筛选。 ArrayController通常连接ObjectControllers。

当你的模型是Ember对象的实例时,你应该使用ObjectController。这是在您使用实例余烬数据时发生的。通过Objectcontroller,您可以直接访问模型属性。您不必每次都写model.property

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

My name is {{name}} 

最后,当一个没有模型有理想的情况下只使用Ember.Controller。它不允许直接访问模型属性作为ObjectController。