2012-07-27 39 views
24

Trong một mở rộng của Google Chrome, tôi muốn sử dụng chrome.storage.local (như trái ngược với localStorage) vì:chrome.storage.local.set sử dụng một chìa khóa tên biến

  1. Với cặp khóa-giá trị, giá trị có thể bất kỳ đối tượng (như trái ngược với chuỗi chỉ)
  2. những thay đổi trong mô hình dữ liệu sử dụng setter storage.set có thể kích hoạt một event listener

sử dụng storage.set, làm thế nào tôi có thể có một cái tên chính biến?

Lưu ý: Nếu tôi không sử dụng setter, tôi có thể làm storage[v1], nhưng thay đổi đối tượng sẽ không kích hoạt trình xử lý sự kiện.

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

Trong trường hợp này sẽ giúp ... storage.set = function() {var schema = this.parameters [functionName]; chromeHidden.validate (đối số, giản đồ); return sendRequest ( 'storage.' + FunctionName, [không gian tên] .concat (Array.prototype.slice.call (đối số)), extendSchema (giản đồ)); } – user1558225

+0

@Pacerier Tôi tự hỏi lý do đằng sau việc dành thời gian để chỉnh sửa câu hỏi và 2 câu trả lời chỉ để refactor 1 tên biến. – Xan

Trả lời

37

Đây có phải là nơi bạn đang tìm kiếm không?

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

Đó là năm 2016 và Chrome (và Firefox và Edge - mọi người sử dụng mô hình tiện ích Chrome) hỗ trợ ES6 Computed Property Names.

Cùng với đó, công việc trở nên đơn giản hơn:

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); 
}); 
Các vấn đề liên quan