Отмена регистрации действия при выполнении в диалоге подтверждения в Dojo - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть виджет додзё, как показано ниже:

define("myWidget/AnExperiment", [
    "dojo/_base/declare",
    "dojo/dom-style",
    "dijit/ConfirmDialog",
    "dijit/_WidgetBase"
    ], function(declare, domStyle, ConfirmDialog, _WidgetBase) {

return declare([_WidgetBase], {

myDialog: null,

createDialog: function() {
self = this;

self.myDialog = new ConfirmDialog({
                title: 'MyDialog',
                content: 'This is my Dialog.',
                closable: false
            });

domStyle.set(myDialog.cancelButton.domNode, "display", "none");

self.myDialog.on("execute", function() {
                console.log('Func1 called');
                self.myFunc1();
            });

self.myDialog.show();

setTimeout(function() {
                self.changeDialogAction();
            }, 30000);

}

changeDialogAction: function () {
    var self = this;
    self.myDialog.set("title", 'Changed MyDialog');
    self.myDialog.set("content", 'This is the changed dialog');
    // WHAT DO I DO HERE TO UN-REGISTER OLD ON-EXECUTE ACTION
    self.myDialog.on("execute", function() {
        console.log('Func2 called');
                self.myFunc2();
    });
},

myFunc1: function() {
 console.log('This is func1');
},

myFunc2: function() {
 console.log('This is func2');
}
}   

При вызове createDialog создается ConfirmDialog.Изначально он настроен на вызов Func1 on-execute.Затем отображается Dialog.

Однако, если пользователь ничего не делает в течение 30 секунд, действие on-execute изменяется на вызов Func2.

Моя проблема в том, что когда пользователь щелкает через 30 секунд, вместо того, чтобы просто Func2 получить вызов, вызываются и Func1, и Func2.

Как мне отменить регистрацию , чтобы вызывать только Func2, если выполнение происходит через 30 секунд?

1 Ответ

0 голосов
/ 14 февраля 2019

Из документации "Возвращаемое значение on() предоставляет метод, который можно использовать для удаления прослушивателя событий из события."

Пример:

require(["dojo/on", "dojo/_base/window"], function(on, win){
  var signal = on(win.doc, "click", function(){
    // remove listener after first event
    signal.remove();
    // do something else...
  });
});

так, как только функция1вызывается, вы можете использовать обработчик (сигнал), чтобы удалить его.

...