我正努力让Dijit对话框为可重复的示例而工作。我从this JSfiddle获取了工作代码,并且只是尝试将其转换为在整个示例中使用的命名函数。
作者使用:
new Button({label: 'Show dialog', onClick: function() {
//Create dialog programmatically here
}
});
但我改变了这一点略有不同:
function launchSelectDialog(selectOptions) {
//Create dialog programmatically here
}
registry.byId("default-launch", "onClick", launchSelectDialog(allOpts));
Here is my version.不幸的是,这只是在加载页面后立即启动对话框,而在点击按钮时再也不会再次启动。
我已经检查过JSFiddle中的NoWrap选项。关于发生了什么,我没有其他线索。 如果您有任何想法,请提供帮助。
答案 0 :(得分:1)
()
是调用运算符。您自己调用该函数,并将函数的返回值设置为事件处理程序。如果要重用该函数,请使用闭包:
function launchSelectDialog(selectOptions) {
// the returned function will be used as the event handler
return function() {
// the passed `selectOptions` is remembered in this context
}
}
另一种选择是:
registry.byId("default-launch", "onClick", function() {
launchSelectDialog(allOpts);
});
答案 1 :(得分:1)
在使用<clear/>
进行检索之前,您需要启动Button小部件。
在您的代码中,实际registry.byId()
正在返回registry.byId("default-launch")
;
同样undefined
函数只接受registry.byId()
,因此将忽略其他参数。
要解决此问题,您应该正确启动Button实例并在id
内声明launchSelectDialog(allOpts)
,如下所示:
onClick
脚本的固定版本。
var myButton = new Button({
label: "Default Options",
onClick: function() {
launchSelectDialog(allOpts);
}
}, "default-launch");
答案 2 :(得分:1)
有几个问题。
1)像其他人一样指出,你正在调用函数而不是用函数设置事件。因此对话框是可见的onload。
2)你需要等到html被解析。或者您需要使用parser.parse()
这是更新的提琴手:http://jsfiddle.net/49y3rxzg/9/