操纵多个dijit Widget实例的DOM

时间:2010-02-23 11:43:26

标签: javascript dom widget dojo

我开发了一个自定义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)表明浏览器认为一切都是单独的,我为两个不同的实例得到两组不同的结果。

2 个答案:

答案 0 :(得分:0)

我真的不明白你的描述,但错误似乎在这里:

  

似乎从所有Widgets的DOM中删除了孩子

DOMNode不能是多个DOMNode的子节点,小部件也不能同时成为多个小部件的子节点。

答案 1 :(得分:0)

似乎我有一个初始化/范围问题。我把我的孩子对象放在一个数组中。我通过执行以下操作在dojo Object Prototype的属性定义中初始化了数组:

pages: [],

但似乎这导致了一个范围问题,简单地改为:

pages: null,

然后将初始化添加到Widget的postCreate函数中,如:

this.pages = [];

似乎解决了这个问题。我不确定为什么这样的事情会导致范围问题。