2016-03-23 12 views
1

私はこのようなエンバーデータ1.13.16モデルで計算されたプロパティを作成しようとしました:Ember.jsで計算されたプロパティを作成して、単一のEmberデータ属性が汚れていないかどうかを確認しますか?

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

しかし、いくつかの理由で、model.save()プロパティを呼び出した後nameがもはや存在していても、falseに再計算することはありません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プロパティが消費されていることを保証し、その際、他のプロパティの変更このプロパティが更新されること。一般的に、依存キーとしてプロパティを持っている場合は、計算された関数本体にはgetと書かれていなければなりません。また、関数本体にあるプロパティは常に従属キーとしてリストされます。このように動作する理由は、パフォーマンスの最適化によるものだと私は信じています。

関連する問題