【问题标题】:EmberJS - Computed property referencing firstObject do not updateEmberJS - 引用 firstObject 的计算属性不更新
【发布时间】:2014-11-29 00:18:31
【问题描述】:

我有一个这样的模型:

App.Conversation = DS.Model.extend({
    body             : DS.attr('string'),
    created_at       : DS.attr('date'),
    entry            : DS.hasMany('Entry', {async: true}),
    user             : DS.belongsTo('User'),
    allEntriesLoaded : DS.attr('boolean'),
    entryProxyBody   : function() {
        return this.get('entry.firstObject.body');
    }.property('entry.firstObject.body')
});

如您所见,它在函数 entryProxyBody 中引用了它的 Entry hasMany 关系。这个引用很有效,因为调用 entryProxyBody 确实会从 Entry 中的第一个对象返回 body-attribute。

但是我的问题是,当向 Entry-store 添加新值时,计算的属性没有更新。

我像这样添加一条新记录:

App.NewController = Em.ObjectController.extend({
    actions: {
        save: function() {

            var entry = this.store.createRecord('entry', {body: 'Test', created_at: new Date() });

            this.store.find('conversation', this.parentController.get('id')).then(function(conversation) {

                conversation.get('entry').pushObject(entry);
                entry.save();
            });

        }
    },
});

但是.. 如果我在 Chrome 中使用 Ember Inspector 直接更新 Entry 中的第一个对象,那么计算的属性会发生应有的变化。

我错过了什么?感谢您的帮助!

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    我认为您可能想观察条目数组中每个条目的变化。

    entryProxyBody:function() {
        return this.get('entry.firstObject.body');
    }.property('entry.@each.body')
    

    【讨论】:

    • 感谢您的回答。遗憾的是,当我将一个新对象推送到对话中时,该属性仍未更新,因此这并没有奏效。
    • 是的,它仅在您推送到条目数组时更新。所以get('entry').pushObject...,因为我们正在监听每个条目的变化
    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多