時々、ページが再ロードされない限り永続的な変数が必要です。多くのEmberのコンベンションではオブジェクトが拡張されているので、私はprivate変数をどこに置いてパブリック関数からアクセスできるかわかりません。Ember RESTAdapterに永続変数を格納する適切な方法
これはextend()
edオブジェクトに入れても明らかですが、Emberがその関数の親オブジェクトをbind()
していないため、同じオブジェクト内の関数内から変数に到達できません。
shouldReloadRecord: function(store, snapArray) {
window.recordHashStore = window.recordHashStore || [];
let recordHash = `${snapArray.modelName}/${snapArray.id}?include=${snapArray.include}`;
if (!~window.recordHashStore.indexOf(recordHash)) {
window.recordHashStore.push(recordHash);
console.log('Reloading', snapArray.type);
return true;
}
else {
console.log('NOT reloading', snapArray.type);
return false;
}
}
ここに関連するコードがwindow.recordHashStore = window.recordHashStore || []
です:私のRESTAdapter
を前に、要求されたレコードをリロードする必要がある場合、私は控除することができるよう
は、ここで私は配列を格納する方法の例です。これはまさに私が望むものですが、Ember'yのようには見えません。また、window
グローバルスコープを使用するのは良いことではありません。ブラウザでアプリケーションの期間中プライベート変数を保存することができます。そのため、利用可能で、移行時に上書きされません。
なぜここで配列を使用していますか?オブジェクトを使用するとコードが少なくなり、O(n)ではなくO(1)になります。たとえそれが簡単であっても、データ用のサービスを使用しています。 –
@PatrickFisherこれは、私がDSストア内のレコードとしてキャッシュを追加することを考えていたので、気になる迅速な解決策です。しかし、それは質問には関係ありません。 – Redsandro