如何在HTML中通过onClick定义dojo模块以供参考?

如何在HTML中通过onClick定义dojo模块以供参考?,dojo,onclick,require,markup,Dojo,Onclick,Require,Markup,在定义JSP标记引用的单独javascript模块时,我试图遵循最新的Dojo1.9最佳AMD实践。我曾经在同一个JSP文件MyJayEsspEe.JSP中有一个很大的javascript部分,其中javascript部分定义了由各种元素onClick属性调用的函数。现在,我使用Dojo定义机制将javascript分离到一个名为MyCallbacks.js的新文件中 MyCallbacks.js的格式如下所示: define(["dojo/dom", "dojo/dom-style", "do

在定义JSP标记引用的单独javascript模块时,我试图遵循最新的Dojo1.9最佳AMD实践。我曾经在同一个JSP文件MyJayEsspEe.JSP中有一个很大的javascript部分,其中javascript部分定义了由各种元素onClick属性调用的函数。现在,我使用Dojo定义机制将javascript分离到一个名为MyCallbacks.js的新文件中

MyCallbacks.js的格式如下所示:

define(["dojo/dom", "dojo/dom-style", "dojo/has", "dijit/registry", "dojo/on"], 
 function (dom, domStyle, dojoHas, registry, on) {
...
   function clickedOnButton1() {
      console.log("Clicked on button1");
   }
   function clickedOnLinkTwo() {
      console.log("Clicked on second link");
   }
...    
   return {
      clickedOnButton1: clickedOnButton1,
      clickedOnLinkTwo: clickedOnLinkTwo
   }
});
在MyJayEsspEe.jsp文件中,我当前有一个工作标记,包括:

...
    <button data-dojo-type="dijit/form/Button" type="button" onclick="require(['commonjs/MyCallbacks'], function(mycallbacks) {mycallbacks.clickedOnButton1();});">First Button</button>

    <a id="testLinkId" href="#" onclick="require(['commonjs/MyCallbacks'], function(mycallbacks) {mycallbacks.clickedOnLinkTwo();});">Link Two</a>
...
。。。
第一个按钮
...
但是我希望有一种方法来定义模块并要求它,这样在标记中我就可以有更干净的回调,如下所示:

...
    <button data-dojo-type="dijit/form/Button" type="button" onclick="mycallbacks.clickedOnButton1();">First Button</button>

    <a id="testLinkId" href="#" onclick="mycallbacks.clickedOnLinkTwo();">Link Two</a>
...
。。。
第一个按钮
...
我一直在查看定义模块和回调的Dojo参考文档,但到目前为止还没有找到指向我正在寻找的干净解决方案的指针。有没有比我用过的更干净的解决方案

谢谢你抽出时间,
Gregor

如果无法在JS端创建完整的小部件并使用模板附加事件, 使用当前示例,您可以这样编写:

<button data-dojo-type="dijit/form/Button" type="button" onclick="require('commonjs/MyCallbacks').clickedOnButton1();">First Button</button>

<a id="testLinkId" href="#" onclick="require('commonjs/MyCallbacks').clickedOnLinkTwo();">Link Two</a>

作为最佳实践,建议始终将小部件的行为封装在其自身中。小部件应该处理的所有回调都应该在小部件中定义。在单个模块中定义所有回调会破坏模块的模块性和可移植性

回答你的问题:

<script>
    require(['dojo/dom', 'dojo/on', 'commonjs/MyCallbacks'], function(dom, on, MyCallbacks) {
      // register all event handlers here
      on(dom.byId('testLinkId'), 'click', MyCallbacks.clickedOnLinkTwo);
    });
</script>

<a id="testLinkId" href="#">Link Two</a>

require(['dojo/dom','dojo/on','commonjs/MyCallbacks'],函数(dom,on,MyCallbacks){
//在此处注册所有事件处理程序
在(dom.byId('testLinkId')、'click',MyCallbacks.clickedOnLinkTwo)上;
});
<script>
    require(['dojo/dom', 'dojo/on', 'commonjs/MyCallbacks'], function(dom, on, MyCallbacks) {
      // register all event handlers here
      on(dom.byId('testLinkId'), 'click', MyCallbacks.clickedOnLinkTwo);
    });
</script>

<a id="testLinkId" href="#">Link Two</a>