【问题标题】:DOJO: Explanation of function parametersDOJO:函数参数说明
【发布时间】:2011-09-15 00:29:25
【问题描述】:

所以我问了一个较早的问题 (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”参数。我不明白它们来自哪里以及它们的含义或代表什么。 (如果代码需要更多上下文,我可以稍后编辑问题,所以只需将其发布在 cmets 中)。另外,为什么我不能直接使用new dijit.tree.dndSource,为什么我需要使用函数来返回它?

谢谢

【问题讨论】:

  • 寻找任何呼叫dndController。您可能可以直接使用new ...,但哪个更短?
  • 它似乎在树的构造函数中。我在树的声明中覆盖了默认的 dndController。
  • Dojo 似乎使用dndController 作为扩展点,以允许任意dndSource 定义。在这里,您使用的是股票tree.dndSource。所以this arg 参数将是树本身,tree.dndSource 需要它,因此它的实现可以被任意树使用。

标签: javascript function dojo


【解决方案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 传递的参数做一些更自定义的事情。

【讨论】:

    猜你喜欢
    • 2020-03-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多