ObjectController和ArrayController

时间:2012-09-26 07:23:58

标签: ember.js

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

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

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

2 个答案:

答案 0 :(得分:13)

通常,如果您的Controller代表项目列表,您将使用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。查看源代码,如果您正在构建一个不适合其他两个控制器的自定义控制器,您似乎可能想要使用它。

答案 1 :(得分:0)

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

如果model是一个数组,那么你应该使用ArrayController。它将允许你在将来以简单的方式实现排序或过滤。 ArrayController通常连接ObjectControllers。

当你的模型是Ember Object的一个实例时,你应该使用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。