我很困惑为什么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)到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({});
答案 0 :(得分:1)
如Ember docs中所述:
Ember.ObjectController是Ember控制器层的一部分。它是 旨在包装单个对象,代理未处理的尝试获取 并设置为基础模型对象,并转发未处理 行动试图达到目标。
ObjectController期望存在模型并将其设置为内容。它基本上是单个对象的包装器。