我正在开发一个使用其他两个插件的插件。我打算使用.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
谢谢 -
答案 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)
<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
});
});
更新:关于异步性,您应该考虑是否不介意让用户至少等待这两个文件都被提取。