无法将click事件处理程序连接到dojo中的按钮

时间:2014-06-02 11:02:36

标签: javascript dojo

我正在创建一个小型的Web服务,它需要一个按钮来将地图重新​​定位到预定义的点。这似乎是一分钟的要求让我在过去的两个小时里忙碌。

脚本正在使用ArcGis Js api 3.9。

这是有问题的代码:

//ClickEvent To reCenter the map
var ReCenterButton = dom.byId('btnReCenter');
ReCenterButton.on('click', function (e) { 
     map.centerAndZoom(new Point(14, 51), 9);
});

标记:

<button id="btnReCenter" data-dojo-type="dijit/form/Button" type="button">ReCenter</button>

ReCenterButton = dom.byId(/* { ... } */);行会引发错误:

  

未捕获的TypeError:undefined不是函数。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

我认为这里有几个错误,首先没有Dojo 3.9,我想这是一个错字,你的意思是Dojo 1.9。

您获得的错误意味着它找不到函数,可能是因为您没有导入dojo/dom模块,因此无法找到dojo/dom::byId()函数。确保模块正确包含在require()中,并将其映射到名为dom的变量,例如:

require([ "dojo/dom" ], function(dom) {
    var ReCenterButton = dom.byId("btnReCenter");
});

但是,DOM节点具有 on()功能,因此这也可能是错误的原因。当您使用dojo/dom::byId()时,它将返回一个普通的DOM节点。但是,如果您使用的是dijit/form/Button等小部件,则应使用dijit/registry::byId()函数,例如:

require([ "dijit/registry", "dojo/ready", "dijit/form/Button", "dojo/parser" ], function(registry, ready) {
    ready(function() { // Wait until the HTML markup is parsed and the widgets are instantiated
        var ReCenterButton = registry.byId('btnReCenter'); // Use dijit/registry
        ReCenterButton.on('click', function (e) {
            map.centerAndZoom(new Point(14, 51), 9);
        });
    });
});