有時,只要頁面未重新加載,您就需要一個持久變量。由於大量的Ember約定是擴展對象,我不確定在哪裏放置私有變量,以便它們可以從公共函數訪問。在Ember中存儲持久變量的正確方法RESTAdapter
似乎很明顯,只是把它放在extend()
ed對象中,但是這個變量不能從同一個對象的函數內到達,可能是因爲Ember不是函數的父對象bind()
。
這裏是我如何存儲陣列的例子,這樣我可以扣除,如果我的RESTAdapter
應該重新加載以前已經被請求的紀錄:
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 || []
。這正是我想要的,但它看起來不像Ember'y。全球範圍使用window
也不好。我可以在瀏覽器中將應用程序持續時間的私有變量存儲在哪裏,以便它在轉換時可用並且不會被覆蓋?
你爲什麼在這裏使用數組?使用一個對象將會減少代碼和O(1)而不是O(n)。我第二次使用數據服務,即使它是微不足道的。 –
@PatrickFisher這是一個想到的快速解決方案,因爲我正考慮在DS商店中將緩存添加爲記錄。儘管如此,這與問題無關。 – Redsandro