代码之家  ›  专栏  ›  技术社区  ›  Kitson

操作多个dijit小部件实例的DOM

  •  0
  • Kitson  · 技术社区  · 16 年前

    我开发了一个定制的dijit模板小部件。我必须对 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 回复  |  直到 16 年前
        1
  •  0
  •   Bill Keese    16 年前

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

    似乎从所有小部件的DOM中删除了该子项

    一个domnode不能是多个domnode的子级,一个widget也不能同时是多个widget的子级。

        2
  •  0
  •   Kitson    16 年前

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

    pages: [],
    

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

    pages: null,
    

    然后将初始化添加到 postCreate 小部件的功能如下:

    this.pages = [];
    

    似乎已经解决了问题。不过,我不知道为什么会出现这样的问题。