这可能很明显,但我无法弄清楚如何完成它。
我有一个使用href填充数据的Dojo对话框。
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
以便立即加载对话框,但这似乎对我没有帮助。
帮助任何人?
答案 0 :(得分:1)
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
});
});
答案 1 :(得分:0)
在连接对话框之前,您需要等待对话框打开:
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');