在noconflict模式下的getScript

时间:2015-03-22 12:48:42

标签: jquery getscript

由于Wordpress在非冲突模式下加载jQuery,我必须将我的脚本包装在jQuery(function($){...})

父脚本按预期执行。 但是,我通过getScript有条件地加载第二个脚本:

$.getScript('js/2nd.js').done(function() {
   editElem();
});

我是否还需要将所有内容包装在内部" 2nd.js"?如果我不这样做,没有任何反应 - 甚至在Chromes控制台中都没有出现错误。如果我把它包起来,它会说'#34; editElem没有被定义" - 虽然我的" 2nd.js"当然是定义它。

感谢您的见解。

1 个答案:

答案 0 :(得分:0)

最好仍然包装它 - noconflict模式的目标是即使$变量被另一个库占用,也能保持代码正常工作。但是,正如您所发现的那样,一旦他们进入封闭,您的全球职能就不再是全球性的!

Globals不被认为是JavaScript最好的成就,这个案例就是一个很好的例子;像RequireJS(可能是extended for lazy loading?)这样的模块加载器可以让你的生活变得更轻松。

也就是说,如果你只有两个文件并且只想从2nd.js导出你的函数,你可以在没有任何额外库的情况下实现这一点:

(function ($) {
    // ... define your functions
    function editElem () {
    }
    function otherFunc () {
    }
    function privateFunc () {
    }

    // export any functions needed by scripts outside this file.
    window.LazyUtils = {
        editElem: editElem,
        otherFunc: otherFunc
    };
}( jQuery ));

之后,您应该可以从第一个JS文件,控制台或任何地方调用LazyUtils.editElem()。由您决定该模块的名称 - " LazyUtils"只是一个例子。