Manchmal möchten Sie eine Variable, die persistent ist, solange die Seite nicht neu geladen wird. Da viele der Ember-Konvention Objekte erweitern, bin ich nicht sicher, wo private Variablen abgelegt werden sollen, damit sie von öffentlichen Funktionen aus zugänglich sind.Was ist die richtige Methode zum Speichern von persistenten Variablen in Ember RESTAdapter
Es scheint naheliegend, es einfach in das extend()
ed-Objekt zu setzen, aber dann ist die Variable nicht innerhalb einer Funktion in demselben Objekt erreichbar, wahrscheinlich weil Ember das übergeordnete Objekt nicht zur Funktion hat.
Hier ist ein Beispiel dafür, wie ich ein Array speichern, so dass ich abziehen kann, wenn meine RESTAdapter
einen Datensatz neu zu laden soll, die vor angefordert wurden:
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;
}
}
der entsprechende Code hier window.recordHashStore = window.recordHashStore || []
ist. Das macht genau das, was ich will, aber es sieht nicht sehr nach Ember'y aus. Es ist auch nicht schön, den globalen Bereich window
zu verwenden. Wo kann ich private Variablen für die Dauer der App im Browser speichern, damit diese bei Übergängen verfügbar und nicht überschrieben werden?
Warum verwenden Sie hier ein Array? Die Verwendung eines Objekts wird weniger Code und O (1) statt O (n) sein. Ich benutze zweitens einen Dienst für die Daten, auch wenn es trivial ist. –
@PatrickFisher ist eine schnelle Lösung, die mir in den Sinn kam, weil ich darüber nachdachte, Cache als Datensätze im DS-Speicher hinzuzufügen. Es ist jedoch nicht relevant für die Frage. – Redsandro