我在模板中有一个textarea:
{{textarea id="notes" name="notes" value=App.notes.body}}
在路线的激活方法中,它执行此操作:
App.MyRoute = Ember.Route.extend({
activate: function () {
App.note = store.find('note', {user_id: App.user.id});
}
});
注意是一个定义如下的模型:
App.Note = DS.Model.extend({
user: DS.belongsTo('user'),
body: DS.attr('string'),
user_id: DS.attr('number')
});
这显然是不正确的,因为虽然我从服务器返回JSON,但textarea中没有显示任何内容。
在App.notes模型和textarea之间创建双向绑定的正确方法是什么?
答案 0 :(得分:2)
当您使用store.find
时,会返回类似对象的承诺而不是模型,并且App.note = ...
不会通知观察点,并且您需要触发观察到的textarea更新。为此,需要使用set(propertyName, value)
。您更新的示例如下:
App.MyRoute = Ember.Route.extend({
activate: function () {
this.store.find('note', {user_id: App.user.id}).then(function(note) {
App.set('note', note);
})
}
});
但我们可以使用模型方法改进该样本,并在afterModel中设置注释:
App.MyRoute = Ember.Route.extend({
model: function () {
return this.store.find('note', {user_id: App.user.id});
},
afterModel: function(note) {
App.set('note', note);
}
});
因此,您可以利用ember loading and errors substates来显示加载消息,错误消息等
您的模板中还有一个拼写错误,需要更新为App.note.body
:
{{textarea id="notes" name="notes" value=App.note.body}}