【问题标题】:DOJO difference between instantiation and using sourceDOJO 实例化和使用源的区别
【发布时间】:2011-09-12 23:27:06
【问题描述】:

我是 DOJO 的新手,并试图弄清楚这两种看似两样东西的用途之间的区别。

dndController: new dijit.tree.dndSource("dijit.tree.dndSource",{copyOnly:true})

dndController: "dijit.tree.dndSource"

第二个有效,但是当我使用第一个时,它在加载我的树时给我一个错误。它说类型节点未定义。我想使用第一个的原因是因为我想将 copyOnly 设置为 true。

任何答案都表示赞赏。

【问题讨论】:

    标签: javascript drag-and-drop dojo tree


    【解决方案1】:

    该参数需要一个构造函数 function 而不是您传递的对象。也许以下方法会起作用:

    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
    }
    

    一些解释:

    我实际上对树上的拖放一无所知。我所做的只是查看 Tree 源代码(它位于 dijit/Tree.js 或类似的地方)以找出 dndController 的使用位置。从那时起,我可以发现它应该是一个可以接收这两个参数的函数(或表示此类函数路径的字符串......)。我刚刚从您的问题陈述中复制了实际使用的 dijit.tree.dndSource 函数,希望它能起作用。

    dojo.mixin 函数将其第 2、3、... 参数中的所有对象混合到第一个参数中。通过使用一个新的空对象作为“接收”对象,我们有一种巧妙的方法来制作 params 的浅拷贝,设置 copyOnly 而不修改原始 params 对象。

    【讨论】:

    • @missingno谢谢!那工作得很好。由于我还是 Dojo/Javascript 的新手,如果您能提供更多解释,我将不胜感激。我尝试查找使用的组件(dojo.mixin 和树上的源代码和 dndSource)。具体来说,这些是我没有得到的要点:什么是“arg”和“params”以及它们在哪里被传递。此外,dojo.mixin 正在运行什么,因为它的第一个参数是空的。谢谢,这是一个很好的答案!
    • 这确实有助于澄清事情。我特别喜欢您解释了思考过程(如果我可以再投赞成票或其他什么的话)。但是我仍然对“arg”和“params”的值以及它们从哪里传递感到困惑。这可能是一个基本的 javascript 理解问题,但我不确定。
    • 我也不知道他们在做什么,哈哈。当在 Tree 中调用 dndController 函数时(检查源代码),它接收 this 作为第一个参数和一个 params 变量作为第二个参数(我不知道参数来自哪里 - 你可以检查一下如果你想)。因此,当我必须选择参数名称时,我只是借用了第二个参数名称,并为第一个使用了一个非常懒惰的 arg 名称(可以是 x、foo 或其他任何东西......)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多