有沒有人知道是否可以將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。 3)反序列化的dijit信息和每個dijit \t - 確定 - 根據類型類型 \t,對dijit的調用方法,以恢復其狀態(你只能通過方法調用修改的dijit的狀態) – treaint 2011-02-25 19:50:52
步驟2後顧之憂我:當解析器重新解析頁面時,它會修改每個dijit所連接的DOM元素的屬性? (因爲dijit被重新實例化爲「新」狀態) 步驟3將很難實現。我需要基於dijit類型和特定的屬性名稱來映射需要調用哪些方法。 例如,如果小部件是一個dijit.form.textbox,並且該屬性是{value:「First Name」} 我需要採取這兩條信息並決定調用dijit.form.textbox.set( (顯示值),'名字') – treaint 2011-02-25 19:51:54