我很困惑为什么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)设置为对象代理的'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({});

最佳答案

Ember docs中所述:


  Ember.ObjectController是Ember的Controller层的一部分。它是
  用于包装单个对象,代理未处理的尝试来获取
  并设置为基础模型对象,并转发未处理的
  动作尝试达到其目标。


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

关于javascript - Ember.js Route.setupController与ObjectController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26495311/

10-12 12:29