javascript - 正确销毁 dojo DataStore

标签 javascript dojo

我在我的应用程序中广泛使用声明式 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/

相关文章:

javascript - 带控件的 slider 绑定(bind)到选择

javascript - 使用 jQuery 获取调整大小的图像高度

html - 如何将自定义图像添加到按钮 (dojo 1.7)

javascript - 如何生成结果 Javascript 嵌套延迟

javascript - js 销毁子对象内部对象

javascript - 如何让我的文案JS监听多个按钮?

dojo - 在哪里可以找到 dojo 模块位置?

http - 使用 dojox 表单 iframe 时是否可以发送自定义 http 请求 header

combobox - 如何获得 dijit ComboBox 或 FilteringSelect 所需的最小宽度?

javascript - CasperJs 在嵌套循环中单击链接