2010-02-23 87 views
2

我在應用程序中廣泛使用聲明性的dojo DataStores,並將它們連接到各種聲明式數據驅動的小部件。當我試圖「銷燬」包含DataStore的ContentPane時,問題就出現了。所有使用數據存儲的聲明性示例都使用屬性jsId讓dojo解析器將數據存儲設置爲變量,然後指向該控件。比如我用的是以下幾點:正確銷燬dojo DataStore

<div dojoType="dojo.data.ItemFileReadStore" id="processList" jsId="processList" 
    url="json/processlist.json.php"></div> 
<input dojoType="dijit.form.FilteringSelect" name="processSelect" id="processSelect" 
    value="null" store="processList" searchAttr="label" /> 

它的工作原理就像一個魅力,但問題是,當我摧毀父母的contentPane我注意到變量processList仍然可以在瀏覽器中。在使用應用程序的各個部分之後,我終於在很多很多很少的數據存儲遍佈各處,這顯然是一個相當大的「內存泄漏」。

我該如何避免將數據存儲註冊爲變量(我試圖在store屬性中嘗試dijit.byId()而未成功),或者如何自動將這些數據存儲清理乾淨?

+0

模式很麻煩。但是你總是可以直接刪除對象,對吧? – peller

+0

我發佈了這個之後,我嘗試了一個'delete processList;'在我要手動替換ContentPane中的內容的情況下,並驗證該對象已從DOM中刪除。我的問題是我不想去編寫腳本來清理這些項目。 – Kitson

+0

經過一番探索之後,我確信我沒有做任何「錯誤」的事情,因此開了一張新票#10799(http://bugs.dojotoolkit.org/ticket/10799)來解決「缺陷」問題。 – Kitson

回答

0

根據discussion with the open ticket,dojo版本1.4.x不會自動delete全局變量,它是由解析器通過設置jsId屬性創建的。目前刪除它們的唯一方法是手動跟蹤它們併發出delete variable_name。目前正在考慮爲未來發佈道場提供某種長期解決方案。