Sto costruendo un'estensione di Chrome e ho riscontrato un errore che non riesco a comprendere. Il problema è una proprietà di un singolo oggetto che diventa null
nella memoria di chromi.La proprietà dell'oggetto diventa nulla dopo chrome.storage.sync.set
sto testando questo facendo:
console.log("pre-storage", settings);
var obj = {};
obj[storage_key] = settings;
chrome.storage.sync.set(obj, function() {
chrome.storage.sync.get(storage_key, function(data) {
console.log("post-storage", data[storage_key]);
});
});
Questa è l'uscita:
pre-storage, Object {
...
soundClip: Object {
options: Array[5],
selected: Object {
label: "Soft2",
value: "snd/soft2.wav"
}
}
}
post-storage, Object {
...
soundClip: Object {
options: Array[5],
selected: null
}
}
Memorizzazione JSON.parse(JSON.stringify(obj))
invece di obj
sembra direttamente per risolvere questo problema. Qualcuno ha qualche idea su cosa potrebbe causare questo? Qualsiasi aiuto è apprezzato!
Modifica: Effettuare una copia profonda di obj
non risolve il problema.
Edit2: Dovrei espandere come è impostato settings.soundClip
. Sto usando Angular (1.x) e sto usando una direttiva di selezione personalizzata. La direttiva ridotta si presenta così:
function mySelect() {
return {
restrict: "E",
templateUrl: "mySelect.html",
scope: {
options: "=",
selected: "="
},
link: function (scope) {
scope.select = function (item) {
scope.selected = item;
};
}
}
}
vista modello di direttiva (mySelect.html
):
<div>
<div ng-repeat="item in options track by $index"
ng-click="select(item)">
</div>
</div>
Le proprietà sono poi due vie bound in questo modo:
<my-select selected="settings.soundClip.selected"
options="settings.soundClip.options">
</my-select >
Grazie per la risposta! Sfortunatamente, usando '" test "' invece di 'storage_key' si ottengono gli stessi risultati. – Easypeasy
Esatto, e dal momento che si ottiene il valore usando storage_key, presumo che funzioni. Vorrei vedere come si sta mettendo qualsiasi valore in settings.soundClip.selected (o sintassi del dizionario simile) anche se poiché questa è l'unica parte che presenta il problema, tanto per essere chiari. Ci scusiamo per qualsiasi confusione. – eholder0
Sì, questo può essere interessante, ho aggiunto ulteriori informazioni alla domanda originale! – Easypeasy