DOJO:功能参数说明

时间:2011-09-14 15:42:49

标签: javascript function dojo

所以我问了一个早先的问题(Original Question)。我得到了一个很好的答案,完全符合我的要求。但是,由于我是Javascript / Dojo的新手,我无法完全理解它,也不是问题的回答者。

我的问题是:以下代码如何运作?

dndController: function(arg, params){
    return new dijit.tree.dndSource(
        arg,  // don't mess up with the first parameter
        dojo.mixin({}, params, {copyOnly:true}))
           //create a copy of the params object, but set copyOnly to true
}

因此,最让我烦恼的部分是“args”和“params”参数。我不明白他们来自何处以及他们的意思或代表。 (如果代码需要更多上下文,我可以稍后编辑问题,所以只需在评论中发布)。另外,为什么我不能直接使用new dijit.tree.dndSource为什么我需要使用该函数来返回它?

由于

1 个答案:

答案 0 :(得分:1)

看看dojo源中的dijit / Tree.js。

在Tree.js中,在postCreate函数中(任何小部件都将其用作dijit生命周期的一部分):

if(this.dndController){
    if(dojo.isString(this.dndController)){
        this.dndController = dojo.getObject(this.dndController);
    }
    var params={};
    for(var i=0; i<this.dndParams.length;i++){
        if(this[this.dndParams[i]]){
            params[this.dndParams[i]] = this[this.dndParams[i]];
        }
    }
    this.dndController = new this.dndController(this, params);
}

您会看到一个部分,用于检查dndController属性是什么。如果是字符串,则将dndController属性设置为创建字符串描述的类的函数(这是dojo.getObject(string)正在执行的操作)。

例如,如果this.dndController是字符串"my.special.dnd.controlller",它将返回一个函数,当被调用时实例化my.special.dnd.controller的新实例。

然后将一些参数复制到一个对象中,然后执行以下函数:

(1)通过dojo.getObject

查找

(2)使用您传入的自定义函数。

我认为这个小部件的维护者会这样做,因为有些人只需要指定一个特定的类用作dnd控制器,而其他人则需要根据Tree传递的参数做一些更自定义的事情。