0

HTML5 localstorage から値を取得中に問題に直面しています。JSON.stringify を使用してキーに値を設定すると、コールバックが削除されます。私はこの問題に悩まされています。以下はコードスニペットです。

var topics = {};
var subscribe = function (topic, fn) 
{  
if (!topics[topic]) 
{         
topics[topic] = [];}
topics[topic].push({ callback: fn,context: this  });
window.localStorage.setItem('myArray', JSON.stringify(topics[topic]));
return this;
};
var publish = function (topic) {
var args;args = Array.prototype.slice.call(arguments, 1);
var myArray = JSON.parse(window.localStorage.getItem('myArray'));
for (var i = 0, l = myArray.length; i < l; i++) {var subscription = myArray[i];
        subscription.callback.apply(subscription.context, args);
    }
    return this;

};

どんな助けでも大歓迎です。

乾杯、サジェシュ・ナンビア

4

2 に答える 2

2

現在、関数を格納するための JSON 実装はありません。

そのため、コールバックは削除されています。

于 2012-09-18T05:36:01.150 に答える
0

Adam が正しく説明したように、JSON はコード ロジックではなく、純粋なデータを表すためのものです。これは、関心の分離の問題です。

「正しい」方法は、おそらくローカル ストレージからデータを取得し、データを操作するための機能が既にアタッチされているカスタム JavaScript オブジェクトにラップすることです。みたいなことを考えている

var MyDataObj = function(){
    //constructor
    //load the data from the local storage and associate it to this object like
    this.data = JSON.parse(window.localStorage.getItem('myArray'));
};

MyDataObj.prototype.executeAction = function(){
   //peform your operations like invoking the subscriptions
};

使用法は次のようになります

var dataObj = new MyDataObj();
dataObj.executeAction();

コールバックメソッドの呼び出しの背後にある意図が何であるかはよくわかりません.私の意見では、オブジェクトは何をどのように呼び出すかをカプセル化しています.

それが役に立てば幸い

于 2012-09-18T05:49:04.437 に答える