无法在控制器中设置模型属性
2015-12-04
2775
我有一个名为“test”的简单模型,如下所示:
export default DS.Model.extend ({
name: DS.attr('string')
})
我在“test”路由中的模型钩子定义如下:
export default Ember.Route.extend({
model() {
return this.store.createRecord('test');
}
});
我尝试在“test”控制器中为 model.name 分配一个初始值,但无法使“set”工作。
export default Ember.Controller.extend({
init: function() {
let mod = this.get('model');
this.set (mod.name, "dummyName");
}
})
Ember 检查器显示 mod=null。我做错了什么?
更新: 我尝试了下面评论中推荐的 4 种语法更改。似乎都不起作用。我收到以下每个错误消息:
4 种建议的语法似乎都不起作用。 我收到以下每个错误消息:
- 断言失败:如果没有给出 obj,路径“model.name”必须是全局的。错误:断言失败:如果未提供任何对象,则路径“model.name”必须是全局的。
- 您需要提供一个对象和键来“set”。错误:断言失败:您需要提供一个对象和键来“set”。
- 无法读取 null 的属性“set” TypeError:无法读取 null 的属性“set”
- 无法找到路径“model”中的对象或已销毁。错误:属性设置失败:无法找到路径“model”中的对象或已销毁。
似乎在告诉我“model”出于某种原因为 null。
更新: 我的控制器实际上看起来像这样:
从“ember”导入 Ember;
export default Ember.Controller.extend({
init: function() {
this.set ('model.name', 'dummyName');
},
action: {
save() {
this.get('model').save();
this.transitionToRoute('scenarios');
return false;
},
cancel(){
this.transitionToRoute('scenarios');
return false;
}
}
});
使用此控制器,我收到此错误:
属性设置失败:路径“model”中的对象无法找到或已被销毁。错误:属性设置失败:路径“model”中的对象无法找到或已被销毁。
如果我取出“init”钩子,“save”和“cancel”操作就可以正常工作。命名似乎没问题;我使用 ember-cli pods 生成初始代码
在调用控制器的“init”钩子时“model”是否加载?2个回答
尝试将其添加到您的
route.js
文件中:
setupController(controller, model) {
controller.set("model", model);
}
jeffdill2
2015-12-29
很可能模型未在 init 钩子中加载。您可以在稍后的运行中包装代码:
init: function() {
this._super();
var _this = this;
Ember.run.later(function() {
_this.set('model.name', 'dummyName');
});
},
或者更好的方法是在创建模型时设置属性:
return this.store.createRecord({name: 'test'});
如评论中所建议。
LukeC
2015-12-04