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>
Ответы
Ответ 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 автоматически присвоит ему уникальный идентификатор.