学习Ember.js的一部分我试图在Ember中创建一个Table View,基于Adam的例子。
我面临的问题是,如果我为View创建一个单独的控制器并包含一个用于Rows的itemController,则ember会给出以下错误:Uncaught TypeError:无法调用null ember-1.0.0-rc的方法'lookup' .6.js:13933
当我调试这个时,我发现在以下代码中:
controllerAt: function(idx, object, controllerClass) {
var container = get(this, 'container'),
subControllers = get(this, '_subControllers'),
subController = subControllers[idx];
if (!subController) {
subController = container.lookup("controller:" + controllerClass, { singleton: false });
将容器检索为null
。
当它通过ApplicationController运行时,没有这样的问题。
JS Fiddle对View使用ApplicationController,为itemController使用另一个控制器 - 正常工作
在此项目Controller中指定为{{#each controller itemController="tableRow"}}
,控制器为App.TableRowController
这是一个非常相似的JS Bin,JS Fiddle使用单独的TableViewController:
项目控制器同样指定为{{#each controller itemController='tableRow'}
表格视图的单独控制器使用:{{view App.TableView controllerBinding="tableViewController"}}
绑定,并且此tableViewController在ApplicationController中指定为属性:
App.ApplicationController = Ember.ArrayController.extend({
tableViewController: function() {
var tc = Ember.get('App.TableViewController').create();
tc.set('content',Ember.ArrayProxy.create({
content: Ember.A(tableData)})
);
return tc;
}.property()
});
但由于某种原因,itemController在这里不起作用。
这是JS Fiddle使用单独的Controller for View,但没有任何itemController - 这很好用
控制器中是否有任何遗漏?
请帮忙。感谢。
答案 0 :(得分:0)
大多数情况下,Ember不直接创建对象,而是声明控制器,模型等类的类。而ember使用IOC容器创建这些对象。避免像Controller.create
这样的事情。同样,请直接controllerBinding
避免使用needs
。
所以,而不是controllerBinding
传递要由App.TableView
呈现的内容。
{{view App.TableView contentBinding=content}}
tableData的设置也属于model()
钩子。它适用于示例,因为tableData
变量在范围内。
这是更新的jsfiddle。