所以我问了一个早先的问题(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
为什么我需要使用该函数来返回它?
由于
答案 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传递的参数做一些更自定义的事情。