在下面的代码中,根据 firebug,this 将作为值 [function()],而不是定义返回的对象。
define(["dojo/dom",
"dojo/dom-construct",
.......,
"dojo/domReady!"],
function(dom,
construct,
........){
return {
is_empty_attr: function(attr){
if (attr.many){
return attr.peeks.length === 0;
} else {
return !attr.peeks;
}
},
................
add_button: function(attr){
console.log(this); <- 1
var self = this;
return new Button({
label: 'add',
showLabel: false,
iconClass: "add_icon",
disabled: this.is_empty_attr(attr), <- 2
onClick: function(){
if (attr.inline){
ajax.newObject(self.sub_path_func(attr), function(json){
self.object_table(json, "val_"+attr.path);
});
} else {
ajax.newObject(self.sub_path_func(attr), function(json){
self.object_dialog(json);
});
}
}
});
},
};
});
line (<-1) logs "[function()]" line (<-2) 因此给出未定义的函数错误。
有谁知道为什么会发生这种情况以及如何解决?
[编辑] 我已经解决了这个问题(通过猜测),但在原始版本中,我将数组 [this.add_button, this.someotherbutton] 传递给另一个函数,该函数使用 attr 参数调用数组中的每个函数。所有方法都是 dojo 定义方法的相同返回对象的一部分。在我将 [this.add_button(attr), this.someotherbutton(attr)] (所以实际的按钮)作为第二个函数的参数传递之后,它就起作用了。
我仍然不明白这如何改变了 add_button 中的“this”值,因为调用 add_button 的两种方法似乎都具有可比性,所以如果有人能解释一下,我将不胜感激。[结束编辑]
干杯,拉斯