我开发了一个自定义dijit Templated Widget。我必须对containerNode
的孩子进行一些DOM操作。一切正常,除非我加载了两个小部件,并且containerNode
的子节点的操作似乎影响了所有相同类型的小部件,而不仅仅是小部件的特定实例。
我想我已经把它缩小到我的代码的这一部分,在那里我“卸载”“孩子”我正在执行以下功能:
popPage: function() {
if (this._pagesLoaded) {
var i = this._pagesLoaded - 1;
var y = this.containerNode.children[i];
if (typeof y !== "undefined") {
this.containerNode.removeChild(y);
}
var page = this.pages.pop();
page.unsetPage(); //Internal sub object cleanup
page.destroyRecursive();
this.endPageLoaded--;
this._calcPagesLoaded(); //recalcs this._pagesLoaded
}
},
当我似乎执行此操作时,似乎已从所有窗口小部件的DOM中删除子项。它没有任何意义,并且在Firebug中手动检查事物(如dijit.byId("logScroller62").containerNode.children
)表明浏览器认为一切都是单独的,我为两个不同的实例得到两组不同的结果。
答案 0 :(得分:0)
我真的不明白你的描述,但错误似乎在这里:
似乎从所有Widgets的DOM中删除了孩子
DOMNode不能是多个DOMNode的子节点,小部件也不能同时成为多个小部件的子节点。
答案 1 :(得分:0)
似乎我有一个初始化/范围问题。我把我的孩子对象放在一个数组中。我通过执行以下操作在dojo Object Prototype的属性定义中初始化了数组:
pages: [],
但似乎这导致了一个范围问题,简单地改为:
pages: null,
然后将初始化添加到Widget的postCreate
函数中,如:
this.pages = [];
似乎解决了这个问题。我不确定为什么这样的事情会导致范围问题。