2016-03-23 59 views
1

我已經試過在餘燼數據16年1月13日模型這樣建立一個計算的屬性:如何在Ember.js中創建計算屬性以查看單個Ember Data屬性是否髒?

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    isNameDirty: Ember.computed('name', 'hasDirtyAttributes', function() { 
    return !!this.changedAttributes()['name']; 
    }) 
}); 

但由於某些原因,稱model.save()物業從來沒有重新計算爲false後,即使name不再存在在changedAttributes()。我怎樣才能使這個計算房產工作?

這裏是一個簡化的測試案例:https://ember-twiddle.com/87b1af7abfb103554cb2?openFiles=models.author.js%2C

回答

6

我相信到hasDirtyAttributes不消耗任何地方,這意味着改變觀察員將無法正確設置它的原因。

一個簡單的解決方法是:

isNameDirty: Ember.computed('name', 'hasDirtyAttributes', function() { 
    if (!this.get('hasDirtyAttributes')) { return false; } 
    return !!this.changedAttributes()['name']; 
}) 

這確保了hasDirtyAttributes財產被消耗,並且此屬性,其他屬性發生變化時進行更新。一般情況下,如果你有一個屬性作爲從屬關鍵字,那麼你肯定應該在計算函數體中使用它,並且如果你是函數體中的一個屬性,它應該總是被列爲一個從屬關鍵字。我相信它這樣工作的原因是由於性能優化。