javascript - Dijit 1.7+ 小部件 : how to separate event logic from the present

标签 javascript model-view-controller dojo dom-events

基本上有两种使用 Dijit 创建小部件实例的方法:声明式和编程式。我想要的是两者的混合:使用声明性方法设置 iconClass 等 Prop ,但将事件处理留给外部脚本 block 。

我尝试直接使用 dojo/on 添加事件逻辑,但没有成功。我使用 dojo/dom.byId()dijit/registery.byId() 检索了小部件,但两者都不起作用。所以我的解决方案是将事件 Prop 链接到全局函数,如下所示:

<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,因为在您的代码被执行时执行的 dijit 尚未实例化。将您的代码包装到 dojo/ready 中,如您在 jsFiddle 中看到的:http://jsfiddle.net/phusick/tRSqC/

关于javascript - Dijit 1.7+ 小部件 : how to separate event logic from the present,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10582486/

相关文章:

javascript - 逗号分隔表达式可以用作 JavaScript 中的 if 语句吗?

javascript - 当使用 contentType : 'application/json; charset=utf-8' , 时,我的数据不会传递给 api Controller

php - UML 类图上的 Laravel MVC 应用程序结构

Javascript - Dojo - 对象对自身的引用

javascript - DOJO 是否有类似于 .ajaxComplete() 的方法来监听多个 AJAX 调用何时完成或成功?

javascript - ts-node 和自定义加载器

javascript - AngularJS ng-重复 : view doesn't update on model change…

javascript - JSONP — "SyntaxError: missing ; before statement"或 "Cross-Origin Request Blocked"

c# - 验证是否是人提交表单而不是 DOS :-0

javascript - 为什么输入元素的父节点未定义?