JSFiddle中的Dijit Dialog立即启动 - 而不是onClick

时间:2016-08-30 20:34:04

标签: javascript dojo

我正努力让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选项。关于发生了什么,我没有其他线索。 如果您有任何想法,请提供帮助。

3 个答案:

答案 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

脚本的固定版本。

http://jsfiddle.net/usm829jq/

  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/