Dijit 1.7+ 小部件:如何将事件逻辑与现在分开
Dijit 1.7+ widgets: how to separate event logic from the present
>基本上有两种方法可以使用Dijit创建小部件实例:声明式和编程式。我想要的是两者的混合:使用声明性方法设置像 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>
有没有更好的解决方案?
dojo/on
工作,但你的registry.byId("btn1")
返回undefined
,因为在执行代码的时候,dijits还没有被实例化。将代码包装到dojo/ready
中,如 jsFiddle: http://jsfiddle.net/phusick/tRSqC/
相关文章:
- 收听ckeditor小部件事件
- 使用onClick事件扩展Aviarc容器小部件
- 是否可以在数字输入框中的小按钮中添加事件侦听器
- 剑道窗口还原在最小化然后还原时不调用调整大小事件
- 小部件内类中的气泡事件
- 在 JavaScript 事件中添加最小值和最大值
- 浏览器窗口最小化/最大化事件
- AngularJS没有't在Django管理日期小部件上的jQuery事件后更新ng模型
- 从 onChange 事件中获取小部件的旧值
- 用硒填充和操作jqGrid的搜索小部件似乎不会触发DOM表单事件
- 播放,Soundcloud oembed 小部件的暂停事件
- 小部件中的杜兰达尔事件
- SoundCloud HTML5 小部件未触发加载进度事件
- Dijit 1.7+ 小部件:如何将事件逻辑与现在分开
- 设置剑道小部件事件的回调函数
- 将Google Analytics(分析)点击事件跟踪器添加到Wordpress社交登录小部件元素
- 自定义点击事件触发器,小部件jquery
- 谷歌日历-事件旁边的小图标
- 按钮事件中window.location更改时,IE9 onbeforeunload调用了两次..最小繁殖
- 阻止jQuery小部件事件