所以我试图避免加载某些脚本,直到用户需要它们,但我一直在使用if ... else的模式结束,并在两个地方调用continue代码。在下面的代码中,您可以看到对continueProcessing()方法的两次调用。有没有更好的方法呢?
if (typeof sessionList === "undefined" || typeof sessionList != "function") {
$.getScript('resources/sessionList.js', function() {
continueProcessing();
});
} else {
continueProcessing();
}
function continueProcessing() {
// do stuff
}
答案 0 :(得分:1)
我还没有使用过getScript,但是在加载html模板时遇到了类似的挑战。我一直在使用延期/承诺方法。对于你的情况看起来像这样:
var jqXHR = {};
if (typeof sessionList === "undefined" || typeof sessionList != "function") {
jqXHR = $.getScript('resources/sessionList.js');
}
$.when(jqXHR).then(continueProcessing());
在脚本已经存在的情况下,jqXHR var将不会延迟,因此"然后"立即执行。
这仍然是一些要键入的代码,但至少" continueProcessing"只出现一次。
答案 1 :(得分:0)
这对我来说是一种很好的方式。
答案 2 :(得分:0)
所以我玩了$ .Deferred模式/代码,我想出了这个。它并不简洁,但我认为这是一种更清洁的方式。看起来我有很多代码需要重构......
var dfd = $.Deferred();
if ( typeof sessionList === "undefined" || typeof sessionList != "function" ) {
$.getScript('resources/sessionList.js', function(){
dfd.resolve();
});
}
dfd.done(function() {
continueProcessing();
});