在下面的代码中,根据firebug获取值[function()],而不是define返回的对象。
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);
});
}
}
});
},
};
});
行(&lt; -1)记录“[function()]” line(&lt; -2)因此给出了未定义的函数错误。
有谁知道为什么会发生这种情况以及如何解决这个问题?
[编辑]我已经解决了问题(通过猜测),但在原始版本中,我将数组[this.add_button,this.someotherbutton]传递给另一个函数,该函数使用attr参数调用数组中的每个函数。所有方法都是dojo定义方法的同一返回对象的一部分。它通过[this.add_button(attr),this.someotherbutton(attr)](所以实际按钮)作为第二个函数的参数后工作。
我仍然不明白这是如何改变add_button中的“this”值的,因为调用add_button的两个方法看起来都是可比较的,所以如果有人能解释我会很感激。[end edit]
干杯,拉尔斯
答案 0 :(得分:1)
使用dojo/_base/declare定义您的课程:
define(["dojo/_base/declare",
"dojo/dom",
"dojo/dom-construct",
.......,
"dojo/domReady!"],
function(declare,
dom,
construct,
........){
return declare([], {
is_empty_attr: function(attr){
...
},
add_button: function(attr){
...
}
});
});