Управление DOM множественных экземпляров виджетов dijit - PullRequest
0 голосов
/ 23 февраля 2010

Я разработал собственный шаблонный виджет dijit. Я должен сделать некоторые манипуляции с DOM детьми containerNode. Все работает нормально, за исключением случаев, когда у меня загружены два виджета, и манипулирование дочерними элементами 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 голосов
/ 10 марта 2010

Похоже, у меня была проблема с инициализацией / областью видимости. Я держал свои дочерние объекты в массиве. Я инициализировал массив в определении свойства моего прототипа Dojo Object, выполнив следующее:

pages: [],

Но, похоже, это вызывает проблему с областью видимости, как простое изменение:

pages: null,

И затем добавление инициализации к функции postCreate Виджета, например:

this.pages = [];

Кажется, это решило проблему. Я не уверен, почему что-то подобное вызывает проблему с ограничением объема.

0 голосов
/ 26 февраля 2010

Я не совсем понимаю ваше описание, но ошибка, кажется, здесь:

похоже, что ребенок удален из DOM всех виджетов

DOMNode не может быть дочерним для нескольких DOMNode, и виджет не может быть дочерним для нескольких виджетов одновременно.

...