0

在下面的代码中,根据 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 的两种方法似乎都具有可比性,所以如果有人能解释一下,我将不胜感激。[结束编辑]

干杯,拉斯

4

1 回答 1

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){
            ...
        }
    });
}); 
于 2013-08-22T17:35:46.010 回答