在回调方法上添加自定义小部件

时间:2014-05-30 03:33:09

标签: dojo

我有一个回调方法,当某些事件发生时由其他类调用,该方法将一些对象作为参数发送

    loadingIsDone : function(evt)
    {
        console.log(evt);
        for(var i=0; i<evt.layers.length;i++)
        {
           var row = new _LayerRow(evt.layers[i].layer);
            domConstruct.place(row.domNode,this.containerDiv,"last");
        }
    }

对于收到的每个对象,我需要创建一个名为_LayerRow的Custom小部件,它有一个Checkbox和一个Label

当我调试此代码时,指针不会到达循环的第二行。

并且控制台中没有错误..

但是当我在下面的不同文件中调用相同内容进行测试时

               var obj = new Object();
                obj.id = "124";
                obj.name = "Chiru";
                var lay = new _LayerRow(obj);
                domConstruct.place(lay.domNode,win.body(),1);

_LayerRow小部件工作正常

_LayerRow.js

define([
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_OnDijitClickMixin",
"dijit/_TemplatedMixin",
"dojo/text!../templates/_layerrow.html"
], function (declare, _WidgetBase, _OnDijitClickMixin,_TemplatedMixin, template) {

return declare([_WidgetBase,_OnDijitClickMixin, _TemplatedMixin], {
    templateString: template,

    layer : null,

    constructor : function( layerObj)
    {
        this.id = layerObj.id;
        this.layer = layerObj;

    },
    postCreate : function()
    {
        this.inherited(arguments);
        this.layerName.innerHTML = this.layer.name;
    }

});

});

和templates / _layerrow.html

<div>
  <input type="checkbox" id="${id}">
  <label for="${id}" data-dojo-attach-point="layerName"></label>
</div>

知道为什么它不起作用..我怎么能在这个

中找到问题

1 个答案:

答案 0 :(得分:1)

回调失败的最常见原因是不正确的范围

因为在如上所述的异步回调中,代码正在执行的上下文已经改变。它将不再引用最初提供它的对象,但它的上下文现在将引用封闭对象,即回调。要解决这个问题,您可以使用hitch()强制函数保留其原始上下文

我在回调中看到 this 的引用,请使用hitch来更正范围。

更多信息:http://dojotoolkit.org/reference-guide/1.9/dojo/_base/lang.html#hitch