8

我正在从trek.github.com学习emberjs。该教程同时使用了和。而且还有。Em.ObjectControllerEm.ArrayControllerEm.Controller

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

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

4

2 回答 2

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

于 2012-09-26T10:09:53.777 回答
0

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

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

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

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

My name is {{name}}

最后,当一个人没有模型时,有一个理想的情况可以使用 justEmber.Controller。它不允许像 ObjectController 一样直接访问模型属性。

于 2014-11-12T21:29:40.497 回答