次のように、計算されたプロパティ内に文字列値を格納しました。
clientId: Ember.computed.oneWay("_clientId")
ここで、_clientIdは、次のようにオブジェクトのプロパティとして定義されます。
export default Ember.service.extend { _clientId: null, clientId: Ember.computed.oneWay("_clientId"), updateId() {this.set("_clientId", "fe48822d-bf50-44a1-9ce0-61b06504d726"); } }
次に、次のような計算プロパティを持つコンポーネントがあります。
chartData: Ember.computed("data", function () {
const data = this.get("data");
const clientId = this.get("session").get("clientId");
console.log(clientId);
if (data && data.get("left") !== undefined && data.get("right") !== undefined) {
return data;
}
this.set("_chartDisplayData", null);
return null;
})
updateIdを呼び出したとき、clientIdの値が変更されると、chartData関数が再実行されることを期待していました(clientIdの値が変更されることを確認しました)。ただし、chartData関数が再実行されることはありません。これはなぜですか。
計算されたプロパティにすべての依存関係について伝える必要があります。まず、計算されたプロパティは、どこかで使用されていない場合は実行されません。使用していない場合は、代わりにオブザーバーが必要です。ただし、実際に使用していると仮定すると、計算されたプロパティは、リストされている依存関係の1つが変更された場合にのみ再計算されます。また、オブジェクトを依存関係としてリストした場合、オブジェクトのプロパティの一部のみが変更されても、オブジェクト全体が置き換えられた場合にのみ、オブジェクトは更新されません。これを試して:
chartData: Ember.computed("data.left", "data.right", "session.clientId", function () {
const data = this.get("data");
const clientId = this.get("session.clientId");
console.log(clientId);
if (data && data.get("left") !== undefined && data.get("right") !== undefined) {
return data;
}
this.set("_chartDisplayData", null);
return null;
})
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加