带有ObjectController的Ember.js Route.setupController

时间:2014-10-21 20:04:16

标签: javascript ember.js

我很困惑为什么RouteController如何影响默认Model。这是一个例子。

App.ApplicationRoute = Ember.Route.extend({
    setupController: function(controller, model) {
        this._super(controller, model);
        console.log(model); //returns undefined
        controller.set("title", "Page title");
    }
});

上面的代码段没有错误;模板按预期打印{{title}}。请注意,该模型是“未定义的”。

App.ApplicationRoute = Ember.Route.extend({
    setupController: function(controller, model) {
        this._super(controller, model);
        console.log(model); //returns undefined
        controller.set("title", "Page title");
    }
});

App.ApplicationController = Ember.ObjectController.extend({});

上面的代码会抛出错误 ...

  

(处理路由时出错:索引断言失败:无法委托   set('title',Page title)到object proxy的'content'属性   :它的'内容'未定义。)

...并产生一个空白页面。解决方案是返回模型(空白对象)或使用Controller(默认行为)而不是ObjectController。有人可以解释这种特殊情况吗?为什么在使用ObjectController时Ember不会假设空对象?是假设对象将从商店或服务器传入或检索?

App.ApplicationRoute = Ember.Route.extend({
    model: function() {
        return {};
    },
    setupController: function(controller, model) {
        this._super(controller, model);
        console.log(model);
        controller.set("title", "Page title");
    }
});

App.ApplicationController = Ember.ObjectController.extend({});

1 个答案:

答案 0 :(得分:1)

Ember docs中所述:

  

Ember.ObjectController是Ember控制器层的一部分。它是   旨在包装单个对象,代理未处理的尝试获取   并设置为基础模型对象,并转发未处理   行动试图达到目标。

ObjectController期望存在模型并将其设置为内容。它基本上是单个对象的包装器。