2016-05-13 3 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... 
} 

entryConstructor私はJSONシリアライズ可能な件のデータとして格納エントリを考えるのが好きallowed types(あなた自身の創造のおそらくオブジェクト)の一つです。

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 

サイドノート:構文エラー(不足している括弧などの

  • 気をつけを)
  • プロパティのグローバルオブジェクト(ウィンドウ)について言及すると、実際にはコンテキストについて話しています。
関連する問題