2012-07-27 12 views
24

W Google Chrome Extension, chcę użyć chrome.storage.local (w przeciwieństwie do localStorage), ponieważ:chrome.storage.local.set stosując zmienny nazwę klucza

  1. z par klucz-wartość, wartość może być każdy przedmiot (w przeciwieństwie do łańcucha tylko)
  2. zmiany modelu danych z wykorzystaniem setter storage.set może wywołać detektor zdarzeń

Korzystanie storage.set, jak mogę mieć nazwę zmiennej klucza?

Uwaga: Jeśli nie używam ustawiacza, mogę wykonać storage[v1], ale zmiany obiektu nie uruchomią detektora zdarzeń.

var storage = chrome.storage.local; 
var v1 = 'k1'; 

storage.set({v1:'s1'}); 

storage.get(v1,function(result){ 
    console.log(v1,result); 
    //console output = k1 {} 
}); 
storage.get('v1',function(result){ 
    console.log(result); 
    //console output = {v1:'s1'} 
}); 
+0

W przypadku pomaga ... storage.set = funkcji() { schemat var = this.parameters [functionName]; chromeHidden.validate (argumenty, schemat); return sendRequest ( 'storage.' + FunctionName, [namespace] .concat (Array.prototype.slice.call (argumenty)), extendSchema (schemat)); } – user1558225

+0

@Pacerier Zastanawiam się, jaki był powód poświęcenia czasu na edycję pytania i 2 odpowiedzi tylko na nazwę zmiennej refactor 1. – Xan

Odpowiedz

37

Czy tego właśnie szukasz?

var storage = chrome.storage.local; 

var v1 = 'k1'; 

var obj= {}; 

obj[v1] = 's1'; 

storage.set(obj); 

storage.get(v1,function(result){ 
    console.log(v1,result); 
    //console output = k1 {v1:'s1'} 
}); 

storage.get('v1',function(result){ 
    console.log(result); 
    //console output = {v1:'s1'} 
}) 
12

To 2016 i Chrome (i Firefox i krawędzi - każdy przy użyciu modelu rozszerzenie Chrome) wsparcie ES6 Computed Property Names.

z tym, zadaniem staje się prostszy:

var storage = chrome.storage.local; 
var v1 = 'k1'; 

storage.set({ 
    [v1]: 's1' // Will evaluate v1 as property name 
}); 

storage.get(v1, function(result) { 
    console.log(v1, result); 
});