0

Dojo をいじり始めたところです。Dijit ComboButton の DropDownMenu の項目がクリックされたときにダイアログを表示したかっただけです。dojo.connect を使用して、onclick イベントを関数に関連付けてみました。この関数は、アイテムに含まれるテキストを含むダイアログを表示するだけでしたが、うまくいきませんでした。

私は恐ろしい方法でそれを機能させることができました。すべての作業は、実際には手動で onclick 属性に書き込まれます。私は明らかにここで何かを誤解しています。これは私が現在持っているものです:

JS:

    require(["dijit/form/Button", "dijit/form/FilteringSelect", "dijit/DropDownMenu", "dijit/MenuItem"]);

    //if the following is defined inside dojo.ready, nothing happens
    function getmail(text)
    {
         alert('No mail from '+text);
    }


    dojo.ready(function(){ 
        //the following does nothing:
        dojo.connect(dojo.query(".dijitMenuItemLabel"), "onclick", function(evt) {
            console.log("mail item clicked");
            alert('Blah');
            //dojo.stopEvent(evt);
        });
    });

HTML:

<form method="POST">

    <div data-dojo-type="dijit.form.ComboButton" id="getmail">

        <span>Get All Mail</span>

        <div data-dojo-type="dijit.DropDownMenu">

            <div data-dojo-type="dijit.MenuItem" 
                data-dojo-props="onClick:function(){getmail(dojo.trim(dojo.query('.dijitMenuItemLabel', this.domNode)[0].innerHTML))}">
                Yahoo</div> 

            <div data-dojo-type="dijit.MenuItem">Google</div>

        </div>

    </div>

</form>

私が Dojo について明らかに誤解しているように見えるのは何ですか?

(または、単純な JavaScript の間違いを犯している可能性があります)


JSFiddle

4

1 に答える 1

0

あなたは次のようなものでそれを行うことができるはずです

var myButton = dijit.byId('getmail');
myButton.on('click', function(){ alert('clicked') });

私の推測では、ボタンを取得したときに dojo.byId と dijit.byId を混同したと思われます。通常の DOM ノードは、小文字の「onclick」を接続すると機能しますが、ウィジェットはキャメル ケースの「onClick」イベントを起動します (違いは、dijit が一部で起動するためです)。アクセシビリティのためのキーボード イベント)。

ただし、Dojo の新しいバージョンでは、dojo.connect を使用せずに、先ほど示したより単純な ".on" API を使用するのがおそらく最善です。


ああ、忘れる前に、Dojo パーサーを実行するのを忘れた (または parseOnLoad を true に設定した) ため、ボタンが作成されなかった可能性もあります。JSFiddle で完全に実行可能な例を提供できますか?

于 2012-07-03T14:17:03.097 に答える