1

作为学习 Ember.js 的一部分,我正在尝试根据Adam的示例在 Ember 中创建一个表格视图。

我面临的问题是,如果我为 View 创建一个单独的控制器并为 Rows 包含一个 itemController,ember 会给出以下错误:Uncaught TypeError: Cannot call method 'lookup' of null ember-1.0.0-rc.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将 ApplicationController 用于 View 和另一个控制器用于 itemController - 工作正常

JS斌

在此项目控制器被指定为{{#each controller itemController="tableRow"}}和控制器是App.TableRowController

这是一个非常相似的JS BinJS Fiddle使用单独的 TableViewController: 项目控制器类似地指定为{{#each controller itemController='tableRow'}
Table View 的单独控制器使用:绑定{{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,但没有任何 itemController - 这很好用

我在控制器中有什么遗漏吗?

请帮忙。谢谢。

4

1 回答 1

0

使用 Ember,大多数时候您不会直接创建对象,而是为控制器、模型等声明类。而 ember 使用 IOC 容器创建这些对象。避免诸如Controller.create. 同样避免直接controllerBinding使用needs.

因此,controllerBinding与其提供要由App.TableView.

{{view App.TableView contentBinding=content}}

tableData 的设置也属于一个model()钩子。它在示例中有效,因为tableData变量在范围内。

这是更新的jsfiddle

于 2013-07-13T05:59:34.587 回答