0

我是 dojo 的新手,我遇到了奇怪的问题,我花了很多时间还没有发现,假设我有 4 个按钮:

<button id="btnMoveFirst" data-dojo-type="dijit.form.Button" iconclass="plusIcon">
    &lt; &lt;</button>
<button id="btnMovePrev" data-dojo-type="dijit.form.Button" iconclass="plusIcon">
    &lt;</button>
<button id="btnMoveNext" data-dojo-type="dijit.form.Button" iconclass="plusIcon">
    &gt;</button>
<button id="btnMoveLast" data-dojo-type="dijit.form.Button" iconclass="plusIcon">
    &gt; &gt;</button>

并使用带有事件onclick的 dojo,如下所示:

dojo.connect(dijit.registry.byId('btnMoveFirst'), "onclick",  function(evt){
    alert('test1');
});

dojo.connect(dijit.registry.byId('btnMovePrev'), "onclick",  function(evt){
     alert('test2');
});

dojo.connect(dijit.registry.byId('btnMoveNext'), "onclick",  function(evt){
     alert('test3');
});

dojo.connect(dijit.registry.byId('btnMoveLast'), "onclick",  function(evt){
     alert('test4');
});

但是,当我单击 4 个按钮中的任何一个,甚至是表单中的任何按钮时,我都会收到 4 个警报,而不仅仅是正确的一个。

有人知道吗?

4

1 回答 1

1

我收到 4 个警报而不是只有一个正确警报的原因是:

  • 按钮在调用时未实例化dojo.connect→将代码包装到dojo/ready
  • 连接到不存在的方法 → 连接到onClick而不是onclick

根据讨论,这里是如何在Modern Dojo的问题中编写代码的方式:

require([
    "dojo/ready",
    "dojo/aspect",
    "dijit/registry",
    "dijit/form/Button"
], function(
    ready,
    aspect,
    registry
) {

    ready(function() {

        // dojo/Evented
        registry.byId("btnMoveFirst").on("click", function() {
            console.log("first");        
        });

        // dojo/aspect 
        // it's the same as dojo.connect in previous versions
        // nevertheless this is not recommended
        aspect.after(registry.byId("btnMoveLast"), "onClick", function() {
            console.log("last");            
        });       

    });

});

工作示例: http: //jsfiddle.net/phusick/355MT/ ​</p>

于 2012-12-11T10:24:56.470 回答