0

基本的に、Dijitを使用してウィジェットインスタンスを作成するには、宣言型とプログラム型の2つのアプローチがあります。私が欲しいのは、両方を混合することです。宣言型アプローチでiconClassのような小道具を設定しますが、イベント処理はexternスクリプトブロックに任せます。

dojo / onを使用してイベントロジックを直接追加しようとしましたが、成功しませんでした。とを使用してウィジェットを取得しましたがdojo/dom.byId()dijit/registery.byId()どちらも機能しません。したがって、私の解決策は、イベントの小道具を次のようなグローバル関数にリンクすることです。

<body class="claro">
<script type="text/javascript">
    require([
        "dojo/dom",
        "dojo/on",
        "dijit/registry",
        "dijit/form/Button",
        "dojo/parser",
        "dojo/domReady!"
    ], function (dom, on, registry) {
        // both don't work
        // on(dom.byId("btn1"), "click", function () {alert("hi");});
        // on(registry.byId("btn1"), "click", function () {alert("hi");});

        // this one works
        btnClickListener = function(){alert("hi")};
    });
    // the global function
    var btnClickListener;
</script>

<button id="btn1" data-dojo-type="dijit.form.Button"
        data-dojo-props="iconClass: 'dijitIconNewTask', showLabel:false">
</button>
<button id="btn2" data-dojo-type="dijit.form.Button"
        data-dojo-props="iconClass: 'dijitIconNewTask', showLabel:false, onClick:btnClickListener">
</button>

</body>

より良い解決策はありますか?

4

1 に答える 1

2

dojo/on動作しますが、コードが実行されている時点ではまだdijitsがインスタンス化されていないため、戻り値がregistry.byId("btn1")返されます。このjsFiddleでわかるようにundefined、コードをラップします:http: //jsfiddle.net/phusick/tRSqC/dojo/ready

于 2012-05-14T12:19:35.793 に答える