Подтвердить что ты не робот

Dojo и незарегистрированные виджеты

Я новичок в наборе инструментов Dojo. Я получаю сообщение об ошибке

Tried to register widget with id=myButton but that id is already registered

всякий раз, когда я пытаюсь загрузить контент Dojo дважды (это означает, что я загружаю содержимое HTML через jQuery.Load в контейнер div). Есть ли способ отменить регистрацию уже зарегистрированных виджетов в dojo? Я видел несколько примеров, но я действительно не заставляю их работать.

Моя кнопка:

<button dojoType="dijit.form.Button" id="myButton">button</button>
4b9b3361

Ответ 1

Если вы хотите отменить регистрацию определенных виджетов, вы можете использовать их методы destroy() или destroyRecursive(). Второй уничтожает любые виджеты внутри того, который вы уничтожаете (т.е. Вызов destroyRecursive в виджет формы также уничтожит все компоненты формы).

В вашем случае это звучит так, как лучше всего сделать это до jQuery.load -

var widgets = dijit.findWidgets(<containerDiv>);
dojo.forEach(widgets, function(w) {
    w.destroyRecursive(true);
});

Приведенный выше код отменит регистрацию всех виджетов в <containerDiv> и сохранит их связанные узлы DOM. Чтобы уничтожить узлы DOM, перейдите false в destroyRecursive.

Ссылка:

http://dojotoolkit.org/api/1.3/dijit/_Widget/destroyRecursive

Ответ 2

Основываясь на http://bugs.dojotoolkit.org/ticket/5438, я нашел достаточный способ уничтожить dojo -widgets:

dijit.registry.forEach(function(w){
                  w.destroy();             
          });

Ответ 3

Это сработало для меня:

dijit.byId( 'myButton' ).destroy( true );

Ответ 4

Я думаю, вам было бы лучше удалить идентификатор с вашей кнопки и получить доступ к нему с помощью точки прикрепления. В основном вы делаете <button dojoType="dijit.form.Button" data-dojo-attach-point="myButton">button</button>

то в вашем коде вы получите доступ к нему, как this.myButton...., но не уверен, какую версию dojo вы используете. Это устранит любые проблемы с идентификатором, так как dojo автоматически присвоит ему уникальный идентификатор.