我很困惑为什么Route
和Controller
如何影响默认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/