2010-02-23 3 views
0

Я разработал собственный шаблонный виджет с диадемом. Я должен сделать некоторые манипуляции DOM с детьми containerNode. Все работает отлично, за исключением случаев, когда у меня есть два загруженных виджета, а манипуляции с дочерними элементами containerNode, похоже, влияют на все виджеты того же типа, а не только на конкретный экземпляр виджета.Манипулирование DOM нескольких экземпляров виджета диджита

Я думаю, что я сузили его до этой части моего кода, где я «разгрузить» «дети» Я уверен, выполнение следующей функции:

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

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

pages: [], 

Но, кажется, что это вызывает вопрос рамочный как простое изменение:

pages: null, 

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

this.pages = []; 

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

0

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

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

А DOMNode может» t - дочерний элемент из нескольких DOMNodes, а также не может быть дочерним элементом нескольких виджетов одновременно.

+0

Да, я понимаю это, но, по-видимому, я выполняю приведенный выше код, чтобы удалить дочерние узлы DOM из экземпляра Widget A, но он удаляет один и тот же индекс дочернего узла из всех экземпляров Widget (например, B, C и т. Д.). – Kitson

+1

ОК, не вижу ваш код, но я предполагаю, что this.containerNode.children - это массив, который получает общий доступ к нескольким экземплярам, ​​потому что вы объявили его в прототипе чего-то. –

+0

Да, это тоже моя догадка ... Я собираюсь вернуться к коду, но я прямо не объявляю его, поскольку 'containerNode' устанавливается автоматически с помощью шаблона' dijit._Templated' HTML. Возможно, я как-то это испортил, но я так не думаю. – Kitson

Смежные вопросы