Javascript 正确销毁dojo数据存储
我在应用程序中广泛使用声明性dojo数据存储,并将它们连接到各种声明性数据驱动的小部件。当我试图“销毁”包含数据存储的ContentPane时,问题就出现了。所有使用数据存储的声明性示例都使用属性Javascript 正确销毁dojo数据存储,javascript,dojo,Javascript,Dojo,我在应用程序中广泛使用声明性dojo数据存储,并将它们连接到各种声明性数据驱动的小部件。当我试图“销毁”包含数据存储的ContentPane时,问题就出现了。所有使用数据存储的声明性示例都使用属性jsId让dojo解析器将数据存储设置为变量,然后控件指向该变量。例如,我使用以下方法: <div dojoType="dojo.data.ItemFileReadStore" id="processList" jsId="processList" url="json/processlist
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()
,但没有成功),或者如何自动让这些数据存储自行清理?根据,dojo的1.4.x版不会自动删除全局变量,这些变量是由解析器通过设置jsId
属性创建的。当前删除它们的唯一方法是手动跟踪它们并发出delete变量\u name
。正在考虑dojo未来版本的某种长期解决方案。根据,dojo的1.4.x版不会自动删除解析器通过设置jsId
属性创建的全局变量。当前删除它们的唯一方法是手动跟踪它们并发出delete变量\u name
。dojo的未来版本正在考虑某种长期解决方案。这种模式令人不安。但是你总是可以直接删除对象,对吗?在我发布了这个之后,我尝试了删除进程列表
在一种情况下,我将手动用其他内容替换ContentPane
上的内容,并验证该对象已从DOM中删除。我的问题是我不想到处写脚本来清理这些物品。经过进一步的探索,我确信我没有做任何“错误”的事情,因此开了一张新的罚单#10799(),以解决“缺陷”。我怀疑有人担心商店可能会被共享,因此,让小部件删除它可能会有攻击性。也许某种引用计数方案可以工作。理解,但是本机js是否会删除processList代码>实际销毁dojo对象?我使用jsId
的唯一原因是我不知道以声明模式将数据存储传递给小部件的另一种方法dijit.byId()
不起作用,因为数据存储不是小部件,而且dojo.byId()
只返回DOM节点,而不返回对象。该模式很麻烦。但是你总是可以直接删除对象,对吗?在我发布了这个之后,我尝试了删除进程列表
在一种情况下,我将手动用其他内容替换ContentPane
上的内容,并验证该对象已从DOM中删除。我的问题是我不想到处写脚本来清理这些物品。经过进一步的探索,我确信我没有做任何“错误”的事情,因此开了一张新的罚单#10799(),以解决“缺陷”。我怀疑有人担心商店可能会被共享,因此,让小部件删除它可能会有攻击性。也许某种引用计数方案可以工作。理解,但是本机js是否会删除processList代码>实际销毁dojo对象?我使用jsId
的唯一原因是我不知道以声明模式将数据存储传递给小部件的另一种方法dijit.byId()
不起作用,因为数据存储不是小部件,dojo.byId()
只返回DOM节点,而不返回对象。