Dojo: Как мне подключить обработчик onchange к блоку выбора в диалоге, загруженном с помощью xhr? - PullRequest
1 голос
/ 01 апреля 2012

Это может быть очевидно, но я не могу понять, как это сделать.

У меня есть диалог Dojo, который я заполняю данными, используя href.

var newDialog = new Dialog({
  title: 'Here is my dialog',
  style: 'width: 50%',
  href: 'path/to/content/script'
});

Диалог отображается, когда пользователь нажимает кнопку:

var showDialog_button = new Button({
  label: "Create new scrum",
  onClick: function(){
    newDialog.show();
    dojo.connect(dojo.byId('select1'), 'onChange', select1_onchange);
  }
}, 'button_id');

Диалоговое окно содержит пару полей выбора, которые необходимо подключить: если в одном из них выбран параметр, другой также необходимо изменить (один содержит список групп, а другой - список членов). этой группы - поэтому, когда группа X выбрана, другой выбор должен показывать только члены X).

Но проблема в том, что, поскольку я загружаю диалоговое окно асинхронно, я пытаюсь подключить обработчик onchange до завершения загрузки диалогового окна.

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

Помочь кому-нибудь?

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Метод dialog.show () возвращает dojo.Deferred, который разрешается после завершения анимации дисплея.

Поэтому вы можете использовать dojo.when или dojo.then, чтобы делать все, что нужно сделать последиалоговое окно заканчивает рендеринг.

В вашем примере, что-то вроде этого должно работать:

var connectEvent = null; 

var showDialog_button = new Button({
    label: "Create new scrum",
    onClick: function(){
        newDialog.show().then(function(){
            connectEvent = dojo.connect(dojo.byId('select1'), 'onChange', select1_onchange);
        }
    }
}, 'button_id');

// and later on, when the event is no longer needed...
connectEvent && dojo.disconnect(connectEvent);

В качестве альтернативы, вы можете использовать dojo 1.7.2 dijit / on , чтобы сделать этолучше, используя следующий синтаксис:

showDialog_button.on("click", function(response) {
    var onShowEvt = dialog.on("show", function(e) { 
        onShowEvt.remove();
        // Connect your other events here
    });
});
0 голосов
/ 02 апреля 2012

Вам нужно подождать, пока откроется диалоговое окно, прежде чем подключаться к нему:

var showDialog_button = new Button({
    label: "Create new scrum",
    onClick: function(){
        newDialog.show();
        var showHandle = dojo.connect(newDialog, 'onShow', function () {
            dojo.disconnect(showHandle);
            dojo.connect(dojo.byId('select1'), 'onChange', select1_onchange);
        });
    }
}, 'button_id');
...