我在我的应用程序中广泛使用声明式 dojo 数据存储,并将它们连接到各种声明式数据驱动的小部件。当我试图“破坏”包含 DataStores 的 ContentPane 时,问题就出现了。所有使用数据存储的声明性示例都使用属性 jsId
让 dojo 解析器将数据存储设置为变量,然后控件指向该变量。例如,我使用以下内容:
<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()
但没有成功)或者我如何自动拥有这些数据存储会自行清理?
最佳答案
根据 discussion with the open ticket , dojo 1.4.x 版本不会自动删除
解析器通过设置jsId
属性创建的全局变量。目前删除它们的唯一方法是手动跟踪它们并发出 delete variable_name
。正在考虑为 dojo 的 future 版本提供某种长期解决方案。
关于javascript - 正确销毁 dojo DataStore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2317110/