我有一個屬性mood
它是一個組件的接口的一部分。幕後我有一個計算的屬性稱爲_mood
:Ember的易失性和模板
const { computed, typeOf } = Ember;
_mood: computed('mood','A','B','C' function() {
let mood = this.get('mood');
if (typeOf(mood) === 'function') {
mood = mood(this);
}
return !mood || mood === 'default' ? '' : `mood-${mood}`;
}).volatile(),
我在那裏與Ember的計算對象,它掛在volatile()
解決所有非DOM的單元測試成功,但由於某種原因,它是不是一個情況觸發模板在任何情況下更新DOM。它至少應該更新被監視的任何屬性是否改變(在這種情況下爲['mood','A', 'B', 'C']
)。由於它是易變的(即,不會緩存結果),如果模板知道重新渲染組件,但由於某種原因,它不會將新結果顯示在模板中。
如果我刪除volatile()
標記,它對靜態/標量值工作正常,但是如果情緒是函數,那麼結果將被緩存,因此它只能工作一次(不是此問題的工作解決方案)。
我該如何得到兩全其美?
在開始的時候不是說''('init')'是否意味着屬性只在初始化時被計算?您使用的CP的語法不同於我以前看到的,因此我可能會誤讀。 – pjmorse
因爲我正在開發一個插件,所以我沒有使用函數原型;我還使用了'on'和'computed'的快捷方式,完全限定爲'Ember.on'和'Ember.computed'。這就是說...對你原來的陳述...... on('init','lead-in只是確保它在init事件上運行,但是'calculate(...)'部分確保它每次被檢查聲明的屬性已更新 – ken
我將添加一些調整以使事情更清晰 – ken