我有一个回调方法,当某些事件发生时由其他类调用,该方法将一些对象作为参数发送
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>
知道为什么它不起作用..我怎么能在这个
中找到问题答案 0 :(得分:1)
回调失败的最常见原因是不正确的范围。
因为在如上所述的异步回调中,代码正在执行的上下文已经改变。它将不再引用最初提供它的对象,但它的上下文现在将引用封闭对象,即回调。要解决这个问题,您可以使用hitch()强制函数保留其原始上下文
我在回调中看到 this 的引用,请使用hitch来更正范围。
更多信息:http://dojotoolkit.org/reference-guide/1.9/dojo/_base/lang.html#hitch