将所需的脚本加载到jQuery插件中

时间:2011-07-05 01:55:29

标签: jquery jquery-plugins

我正在开发一个使用其他两个插件的插件。我打算使用.getScript()来加载另外两个脚本,但我想知道如何最好地执行此操作。具体来说,如果调用是异步的,我怎么能保证在插件初始化之前加载脚本?将呼叫设置为非同步会更聪明吗? (这可能吗?)

代码:

(function($){

    // Is this the right place?
    $.getScript('plugin1.js', function() {});
    $.getScript('plugin2.js', function() {});

    // Plugin stuff:
    $.fn.myPlugin = function() {

        return this.each(function() {

        // Dependent plugins better be loaded by this point!


        }); // End of this.each(...)
    };  // End of plugin
})(jQuery); // End of closure 

谢谢 -

3 个答案:

答案 0 :(得分:2)

$.getScript();方法基本上是$.ajax();方法的包装器。这意味着它应该挂钩到jQuery Deferred对象。

试试这个:

var loading = $.getScript('myScript.js');

$.when( loading ).then(function() {

    // Start your plugin code here.

});

多项操作

var script_1 = $.getScript('myScript.js');
var script_2 = $.getScript('myScript2.js');

$.when( script_1, script_2 ).then(function() {

    // Start your plugin code here.

});

答案 1 :(得分:1)

当您拥有自己需要的脚本时,getScript并不是一个很好的决定 - 只需确保将两个插件都包含在您自己的<script>元素之上。

但你可以做:

(function($){
  var plugin1Loaded = false;
  var plugin2Loaded = false;

  $.getScript('plugin1.js', function() {plugin1Loaded = true;});
  $.getScript('plugin2.js', function() {plugin2Loaded = true;});

  $.fn.myPlugin = function() {
    if (plugin1Loaded && plugin2Loaded) {
      ...
    }
  };  // End of plugin
})(jQuery); // End of closure 

答案 2 :(得分:0)

我不确定这是否是最有效的方法,但为什么不呢:

$.getScript('plugin1.js', function() {
  $.getScript('plugin2.js', function() {
    (function($){

    // Plugin stuff:
    $.fn.myPlugin = function() {

        return this.each(function() {

        // Dependent plugins better be loaded by this point!


        }); // End of this.each(...)
    };  // End of plugin
    })(jQuery); // End of closure 
  });
});

更新:关于异步性,您应该考虑是否不介意让用户至少等待这两个文件都被提取。