7

'dan sonra null olur. Bir krom uzantısı yapıyorum ve bir hatayla karşılaştım başımı saramam. Sorun, kromların depolanmasında null haline gelen tek bir nesne özelliğidir.Nesne özelliği, chrome.storage.sync.set

Ben yaparak bu test ediyorum:

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]); 
    }); 
}); 

Bu çıkış ise:

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 
    } 
} 

JSON.parse(JSON.stringify(obj)) yerine obj depolanması doğrudan Bunu düzeltmek gibi görünüyor. Buna neden olabilecek herhangi bir fikri olan var mı? Herhangi bir yardım takdir edilir!

Düzenleme: obj'un bir kopyasını çıkarmak onu düzeltmez.

Düzenleme 2: settings.soundClip'un nasıl ayarlandığına bakmalıyım. Angular (1.x) kullanıyorum ve özel bir seçim yönergesi kullanıyorum. soyunmuş yönerge şuna benzer:

function mySelect() { 
    return { 
     restrict: "E", 
     templateUrl: "mySelect.html", 
     scope: { 
      options: "=", 
      selected: "=" 
     }, 
     link: function (scope) { 
      scope.select = function (item) { 
       scope.selected = item; 
      }; 
     } 
    } 
} 

Yönergesi şablon görünümü (mySelect.html):

<div> 
    <div ng-repeat="item in options track by $index" 
     ng-click="select(item)"> 
    </div> 
</div> 

özellikleri sonra böyle bağlanmış iki yönlü şunlardır:

<my-select selected="settings.soundClip.selected" 
      options="settings.soundClip.options"> 
</my-select > 

cevap

0

JSON çağırarak yana .parse (JSON.stringify (obj)) bunu düzeltiyor gibi görünüyor, benim tahminim, ayar nesnesini bir dizge yerine bir değişkenle kodlamakla ilgili bir problem yaşıyor olmanız. Yardımcı olabilecek here cevabına bakın.

+0

Teşekkür sınırlara göz atın! Ne yazık ki, 'storage_key' yerine' 'test '' kullanmak aynı sonuçları verir. – Easypeasy

+0

Doğru, ve storage_key kullanarak değeri çıkardığınızdan beri, bunun çalıştığını düşünüyorum. Ne olursa olsun, setting.soundClip.selected (veya benzer bir sözlük sözdizimi) içine nasıl bir değer koyduğuna bakarsak, çünkü bu problemin tek kısmı, sadece açık olmaktır. Herhangi bir karışıklık için özür dilerim. – eholder0

+0

Evet, ilginizi çekebilir, orijinal soruya ek bilgiler ekledim! – Easypeasy

0

Toplam kotanın (veya öğenin) vurulma ihtimali var mı? Herhangi bir hata mesajı olup olmadığını görmek için ayarlanmış geri aramada runtime.lastError görüntülemeyi düşünün.

chrome.storage.sync.set(obj, function() { 

    console.log('Error', runtime.lastError); 

    chrome.storage.sync.get(storage_key, function(data) { 
    console.log("post-storage", data[storage_key]); 
    }); 
}); 

burada cevap için chrome.storage.sync.set

+0

Hey, cevap için teşekkürler! Bunun bir sınırı vurduğundan şüpheleniyorum, nesne 434 bayt. chrome.runtime.lastError 'undefined, hepsi bu kadar garip! – Easypeasy

+1

Tekrar deneyebilir misiniz, ancak verileri Angular'den kullanmak yerine, ondan elde etmeyi beklediğiniz değerleri kullanın. Değerlerin serileştirilmesinin @ eholder0'ın önerdiği gibi doğru bir şekilde yapılmaması mümkündür. –

İlgili konular