2012-07-27 29 views
24

En una extensión de Chrome Google, quiero usar chrome.storage.local (en contraposición a localStorage) porque:chrome.storage.local.set utilizando un nombre de clave variable

  1. Con pares de valores clave, el valor puede ser cualquier objeto (en contraposición a la cadena solamente)
  2. los cambios en el modelo de datos usando colocador storage.set puede desencadenar un detector de eventos

usando storage.set, ¿cómo puedo tener un nombre de clave variable?

Nota: Si no uso setter, puedo hacer storage[v1], pero los cambios en el objeto no activarán el detector de eventos.

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

En caso de que esto ayude ... storage.set = function() {var = esquema this.parameters [functionName]; chromeHidden.validate (argumentos, esquema); return sendRequest ( 'storage.' + FunctionName, [espacio de nombres] .concat (Array.prototype.slice.call (arguments)), extendSchema (esquema)); } – user1558225

+0

@Pacerier Me pregunto cuál fue la razón detrás de tomarse el tiempo para editar la pregunta y 2 respuestas solo para refactorizar 1 nombre de variable. – Xan

Respuesta

37

¿Es esto lo que buscabas?

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

Es 2016, y Chrome (y Firefox, y Edge - todo el mundo usando Chrome modelo de extensión) de apoyo ES6 Computed Property Names.

Con eso, la tarea se hace más simple:

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); 
}); 
Cuestiones relacionadas