在使用ember和ember-data构建我的第一个应用程序时,我注意到,在为新创建的模型输入输入字段时,我开始收到以下错误:
断言失败:无法将set('notes',t)委托给object proxy的'content'属性:其'content'未定义。
我通过在路线中添加以下代码解决了这个问题:
App.LessonNewRoute = Ember.Route.extend({
model: function() {
return this.store.createRecord('lesson');
}
});
我的理解是,当我使用ObjectController
创建(而不是让ember生成)LessonController时,会发生此错误。
我现在想知道:
答案 0 :(得分:1)
据我了解,您的方法很好。
为了在视图中使用模型,您必须以某种方式提供模型实例。因此,如果您在未分配任何内容时尝试使用content
,则会失败。我用不同的方法绕过它,但在动作处理程序中创建记录。
对于某些场景,特别是对于小型模型,我通常在控制器中创建相应的属性(一种viewModel方法),并使用一个动作来处理保存。然后我实际在该操作中创建记录,传递createRecord
的控制器属性参数。
示例(完全概念性):
...
App.Person = DS.Model.extend({
name: DS.attr('string')
});
...
App.PersonAddController = Em.ObjectController.extend({
personName: null,
actions: {
save: function() {
var theName = this.get('personName');
var person = this.store.createRecord('person', {name: theName});
person.save().then(
...pointers to success and failure handlers go here...
).done(
...transition goes here...
);
},
cancel: function {
this.set('personName', null);
}
}
})
然后在模板中,我将输入绑定到控制器prop而不是模型。
{{input type="text" value=controller.personName}}
使用这种方法,我的Route#model
不会输出要添加到商店的空白模型,因此我不必处理rollback
或其他任何内容。