基本的に、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>
より良い解決策はありますか?