Dojo диалоговое закрытие события на X (вверху справа)

Im использует Dojo, чтобы создать простой диалог для создания пользователя в системе. Проблема в том, что я получаю сообщение об ошибке:

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

user_submit, является кнопкой Dojo. Я должен закончить форму внутри диалогового окна. Когда я закрываю диалоговое окно, нажимая на него и отправляя форму, нет проблем при открытии диалога еще раз (в событии клика на кнопке у меня есть эта строка кода:

dijit.byId("user_submit").destroy();

но если я закрою диалог с помощью кнопки [x] -link/в правом верхнем углу, я не уничтожу кнопку, а затем не могу открыть диалог снова, не перезагружая страницу.

Как мне получить Dojo, чтобы уничтожить кнопку или как перегрузить событие click на событии [X] -link/, поэтому я могу написать команду destroy для кнопки?

Ответ 1

Найден решение. используя dojo.connect().

myDialog.connect(myDialog, "hide", function(e){
    dijit.byId("user_submit").destroy(); 
});

Если бы я разместил quistion, я бы опубликовал это сообщение вскоре, но у меня не было достаточно очков, так что вот ответ снова, только немного поздно: -)

Ответ 2

"Developer shouldn't override or connect to this method" для "onCancel" см. документацию. Лучшее решение:

var myDialog = new Dialog({
   id: "myDialogId1",
   onHide: function() {
      myDialog.destroy()
   }
});

Ответ 3

IIRC, событие расширения onClose вызывается, когда вы нажимаете на предмет X, поэтому вы можете попробовать разместить там код очистки.


Вы также можете рассмотреть возможность обойти эту проблему полностью. Возможно, вам не нужно уничтожать виджет и вместо этого использовать одно и то же? Вы также можете выполнить тест существования виджета, прежде чем создавать его снова, уничтожив старую версию, если она еще жива.

Ответ 4

Вы можете переопределить метод onCancel(), как указано выше, или вы можете присоединить событие к dijit.dialog.closeButtonNode domElement. dijit.dialog.closeButtonNode - это имя атрибута data-dojo-attach-point для кнопки закрытия.

Exp:

dojo.on(dijit.Dialog.closeButtonNode, "click", function(evt){
      //add your logic here
});

Ответ 5

При нажатии X в верхней части диалогового окна запускается событие onCancel.

Утилизируйте элемент там.