2012-09-18 3 views
0

HTML5 localstorage에서 값을 가져 오는 중에 문제가 있습니다. JSON.stringify를 사용하여 키에 값을 설정할 때 콜백이 제거됩니다. 이 문제가 발생합니다. 다음은 코드 스 니펫입니다.배열을 문자열로 변환하는 동안 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; 

}};

도움이 될 것입니다.

건배 Sajesh 남비 아르

+0

자바 스크립트 함수는 대응 [JSON의 값]이없는 호프가 (http://tools.ietf.org/html/rfc4627#section-2.1). – Gumbo

답변

2

함수를 저장하기위한 JSON 구현은 없다.

콜백이 제거되는 이유가 여기에 있습니다.

+0

코멘트를 주셔서 감사합니다. Adam .... 거기에 어떤 문제가 있습니까? ?? –

+1

아마도이 경로가 적절한 경로인지 여기에 질문 할 것입니다. 너 정확히 뭘 하려구? –

+0

JS에서 펍 서브 패턴을 디자인 중입니다. 게시 된 액션을 localstorage에 저장하고 localstorage에서 구독자를위한 액션을 가져 오는 중입니다. –

0

아담이 올바르게 설명했듯이 JSON은 코드 논리가 아닌 순수한 데이터를 나타내는 데 사용됩니다. 이것은 우려의 분리의 문제입니다.

"올바른"방법은 로컬 저장소에서 데이터를 검색하고 데이터에서 작동하기 위해 이미 부착 된 기능을 가진 사용자 지정 JavaScript 개체로 래핑하는 것입니다. 나는 사용법은 다음

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

나는 당신의 객체가 무엇을 캡슐화 내 의견으로는, 콜백 메소드의 당신의 호출 뒤에 의도가 무엇을 아주 확실하지 않다 것

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 
}; 

처럼 뭔가에 대해 생각하고 있어요 호출하는 방법.

그것이

+0

내 시나리오 Mediator.js는 내 코드 단편에 설명 된대로 게시 및 구독 방법을가집니다. now 1.htm은 다른 HTML에서 캡처해야하는 이벤트를 브로드 캐스팅하고 비즈니스 로직에 따라 필요한 조치를 취해야합니다. 콜백이 필요합니다 ... 나는 그것을 조금 복잡하게 만들지 모르겠다. –

관련 문제