我正在学习emberjs表格trek.github.com。该教程同时使用了Em.ObjectController
和Em.ArrayController
。还有Em.Controller
。
我很困惑何时使用它们,我猜Em.ObjectController
用于单个对象,Em.ArrayController
用于数组,Em.Controller
仅用于ApplicationController。
有什么时候使用哪个有福的规则吗?
答案 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。