在我过去的项目中,我曾经创建一个 javascript 应用程序对象并创建对 dom 和 dijit 节点的引用。前段时间我读到这会导致垃圾收集出现问题,因为 js 保留了对 dom 的引用(或这些行中的某些内容)
app = {
// UI - divs
_divMainView : null,
_divCurrent : null,
_divTmSelectContianer : null,
_divSpSelectContianer : null,
_loadingMsg : null,
_loadingOverlay : null,
// tabs
_tabs : null,
_tab1 : null,
_tab2 : null,
init : function() { },
_initUi : function() {
dojo.parser.parse();
this._divMainView = dojo.byId('main');
this._tab2 = dijit.byId('tab1');
// wire up events
},
_handleEvent : function() {},
_doSomething : function() {}
}
我喜欢我过去做事的方式是,节点“id”在代码中只被引用一次。
那么有什么选择呢?每次需要 domNode / dijit 小部件时使用 dojo.ById() 和 dijit.byId() 吗?我能想到的唯一可维护选项是使用小部件/节点 ID 创建“常量”。