基本上有两种方法可以使用Dijit创建小部件示例:声明式和程序式。我想要的是两者的混合:使用声明性方法设置像iconClass这样的属性,但将事件处理留给外部脚本块。
我尝试用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>
有没有更好的解决办法?
1条答案
按热度按时间yzuktlbb1#
dojo/on
可以工作,但是registry.byId("btn1")
返回undefined
,因为在执行代码时dijit还没有示例化。将代码封装到dojo/ready
中,如jsFiddle所示:http://jsfiddle.net/phusick/tRSqC/