如何将textarea值绑定到Ember中的模型?

时间:2013-11-30 13:47:06

标签: javascript ember.js

我在模板中有一个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之间创建双向绑定的正确方法是什么?

1 个答案:

答案 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}}