当我们为View提供单独的控制器时,项目控制器不起作用

时间:2013-07-12 14:43:41

标签: ember.js

学习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使用另一个控制器 - 正常工作

JS Bin

在此项目Controller中指定为{{#each controller itemController="tableRow"}},控制器为App.TableRowController

这是一个非常相似的JS BinJS 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 - 这很好用

控制器中是否有任何遗漏?

请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

大多数情况下,Ember不直接创建对象,而是声明控制器,模型等类的类。而ember使用IOC容器创建这些对象。避免像Controller.create这样的事情。同样,请直接controllerBinding避免使用needs

所以,而不是controllerBinding传递要由App.TableView呈现的内容。

{{view App.TableView contentBinding=content}}

tableData的设置也属于model()钩子。它适用于示例,因为tableData变量在范围内。

这是更新的jsfiddle