Dojo 위젯 (dijit) 객체를 문자열 또는 브라우저 세션에서 지속될 수있는 표현으로 직렬화/비 직렬화 할 수 있는지 알고있는 사람이 있습니까?dojo 위젯 오브젝트를 직렬화/비 직렬화 할 수 있습니까?
내 시나리오 :모든 스냅 샷을 가져 와서 새로운 브라우저 세션에서 복원 할 수 있기를 원하는 다양한 dijits가있는 웹 페이지가 있으므로 모든 것이 정확히 같은 상태로 복원됩니다. 이 작업을 수행하기 위해서는 페이지의 DOM 트리와 dijit 개체를 직렬화/복원해야한다고 생각합니다. 나는 DOM 트리를 직렬화 할 수 있었고 현재 페이지의 HTML 노드 내용을 바꾸어서 복원하고있다. 페이지의 DOM이 복원되면 dijits가 작동하지 않습니다. 올바르게 렌더링되지만 아무 것도 클릭 할 수 없습니다. 나는 dojo 파서가 페이지를 처음로드 할 때 DOM을 통해 이미 실행했고, 전체 HTML DOM 요소를 대체하면 해당 페이지에 대한 dijit 레지스트리의 모든 dijits가 삭제되기 때문이라고 생각한다. 즉, dijit 클래스를 다시 작성해야한다는 의미이다. 인스턴스화.
이상적으로 내가 할 수 있기를 원하는 것은 "스냅 샷"을 취할 때 dijit.registry에 포함 된 모든 dijit 객체를 파일에 직렬화하고 세션이 복원 될 때, 이 dijit 오브젝트를 재구성하여 dijit 레지스트리에 다시 추가하십시오.
뭔가 같은 : dijit.registry.forEach (기능 (위젯) {? //가 새 브라우저 인스턴스를 복원 할 수 있도록 위젯 객체를 저장 });
누구나 이것을 시도했거나 사용자 지정 직렬 변환기를 작성하지 않고 가능한지 알고 있습니까?
제안 솔루션을 구현하는 과정은 다음과 같습니다. 1) 전체 dijit 객체를 직렬화하는 대신 dijit의 상태를 복원하는 데 필요한 속성 만 직렬화하십시오. (함수와 순환 참조 건너 뛰기) 2) DOM 트리가 다시 채워지면 dojo.parser.parse()를 실행하여 모든 dijits를 다시 인스턴스화하십시오.) 만 메서드 호출을 통해 인 Dijit의 상태를 수정할 수 있습니다 ( – treaint
2 단계 걱정을 3)는 Dijit 정보를 직렬화하고 각는 Dijit에 대한 \t 유형에 기반 유형 \t는는 Dijit에 호출 방법은 그 상태를 복원 할 -Determine 나 : 파서가 페이지를 재 묘화하면 각 dijit이 첨부 된 DOM 요소의 속성이 수정됩니까? (dijit가 "새"상태로 다시 인스턴스화되었으므로) 3 단계는 구현하기가 어려울 수 있습니다. dijit 유형과 특정 속성 이름을 기반으로 호출해야하는 메소드를 찾아야합니다. 예를 들어, 위젯이 dijit.form.textbox이고 속성이 {value : "First Name"} 인 경우 나는이 두 가지 정보를 받아서 dijit.form.textbox.set을 호출해야합니다 'displayedValue', 'First Name') – treaint