2016-05-13 24 views
0

我正在創建一個應用程序,該應用程序根據每個在Simple-Storage中訪問的頁面的url存儲唯一對象。在Add On SDK中動態或計算對象的創建

 var ss = require("sdk/simple-storage"); 
    ss.storage[naming()] = new entryConstructor; 

naming()是一個函數,它會爲每個對象創建一個自定義名稱。

您通常可以將變量聲明爲屬性全局對象(Window)。這是可能的存儲?

回答

0

我真的不明白問題是什麼。它是:

  • 我可以創建一個變量,直接指向ss.storage?
  • 或者我可以通過使用返回該成員的名稱的函數訪問存儲成員?

簡短的回答:是的,你可以是你可以


你可以沒有問題當然寫的:

var ss = require("sdk/simple-storage"); 
var storage = ss.storage; 
/* using 'storage' doesn't matter as long as you don't have identifyers collision */ 
storage[naming()] = new entryConstructor(); 
// and you still can refer to storage using ss.storage 

ss.storage很像一個JavaScript對象。你不能添加函數成員(如果我沒有弄錯)。

如果你有一個返回string一個功能,你當然可以訪問/設置存儲屬性/項(這就是我喜歡它命名)使用該功能,假設返回的值是一個javascript compliant member name

ss.storage[naming()] = new entryConstructor(); 

其中:

function naming() { 
    /* returns a valid javascript object property names */ 
    // building of the property name here... 
} 

entryConstructorallowed types(你自己創造的推測的對象)我喜歡把存儲條目JSON序列化DATAS之一。

在ss.storage中設置條目時請小心。在嘗試設置其值時,應檢查是否存在條目,以防跨越多個會話需要持久數據。如果每個會話開始時間設定值開始,對前幾屆會議註冊舊值會迷路永遠:

let name = naming(); 
let myEntry; 
if (ss.storage.hasOwnProperty(name)) { 
    // use stored value... 
    myEntry = ss.storage[name]; 
} else { 
    // create value... 
    myEntry = new entryConstructor()... 
} 
// make edits... then : 
ss.storage[name] = myEntry; 
// or handle update on user input, contentScript detach or exports.onUnload 

旁註:

  • 語法錯誤(缺少括號等小心)
  • 當你談論屬性全局對象(窗口)時,你實際上是在談論上下文。