2011-08-31 4 views
0

그래서 나는 Module 객체를 가지고 있고, 다음을 사용하여 Module로부터 상속받은 AdvModule 객체를 가지고있다 :JSON 문자열로 데이터베이스에 객체를 저장하고 나중에 다시로드하는 방법은 무엇입니까?

function object(o) { 
    function F() { } 
    F.prototype = o; 
    return new F(); 
} 
function inheritPrototype(subtype, supertype) { 
    var prototype = object(supertype.prototype); 
    prototype.constructor = subtype; 
    subtype.prototype = prototype; 
} 

inheritPrototype(AdvModule, Module); 

Module은 X, Y, height, width와 같은 것을 포함하는 'settings' 현재, 나는 이러한 설정을 json 형식으로 데이터베이스에 저장하고있다. 그런 다음 페이지가 새로 고쳐지면 해당 설정이 데이터베이스에서 가져와 해당 모듈을 다시 만듭니다.

하지만 지금은 AdvModule뿐만 아니라 어떤 종류의 개체를 나타내는 설정에 현재 아무것도 없습니다. 나는 문자열 값을 할당하고 switch 문에서이 설정을 사용하여 어떤 객체를 빌드할지 결정할 수 있다는 것을 알고 있지만 Module에서 상속받은 객체의 수가 volatile이기 때문에 switch 문을 피하고 싶습니다. 다른 개발자들이 들어가서 switch 문을 계속 변경해야하기를 바란다. 설정에서 어떤 객체가 만들어 지는지 알고 싶습니다.

객체의 이름 인 'settings'에 다른 값을 추가하려고했습니다. 즉, {type : AdvModule}과 같이로드 할 때 사용합니다. item> new settings.type(); 어느 것이 작동하는 것 같습니다. 하지만 이걸 내 데이터베이스 JSON.Stringify에 저장하려고하면 그것을 버리거나 무시합니다.

어떤 도움이나 조언을 주시면 감사하겠습니다. 고맙습니다

+0

질문을 한두 문장으로 요약 할 수 있습니까? 저장하는 데 문제가 있습니까? 로드 중입니까? 클라이언트에서 JSON 설정을 소비합니까? 말하기 힘듭니다. 이야기가 너무 깁니다. –

답변

1

{ type : AdvModule } 유효 JSON 객체 아니다). AdvModule이 클래스 또는 다른 복잡한 JavaScript 객체 인 경우 JSON.stringify은 실제로이를 버립니다.

var thing = new window[settings.type]; 
: 당신이 그것을 인스턴스화 할 때 그런 다음 같은 것을 할 수 있습니다

var settings = { type : "AdvModule" }; 

을 :

이 솔루션은 즉, 대신 개체 자체의 객체의 이름을 저장하는 것입니다

이것은 new window.AdvModule을 호출하는 것과 같습니다 (AdvModule이 글로벌 네임 스페이스에없는 경우, 즉 window). window을 올바른 컨텍스트로 바꾸십시오.

+0

정말 대단합니다! 정말 고마워. 나는 내가 가까웠다는 것을 알았지 만, 나는 '창'을 사용할 수 있다는 것을 깨닫지 못했다. – Zholen

관련 문제