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

正しい 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 に答える