2

假设我有两个单独的 JavaScript 块,脚本 A 和脚本 B。在脚本 BI 中,脚本 A 调用函数 a,但尚未下载和/或解释脚本 A。库应该解决依赖关系(使用表或其他东西),触发 A 的解释,然后执行所需的函数调用。

这有时可能很有用(我知道通常不会)。

我已经阅读了这篇文章并且了解了Lazy Ready 插件,但他们似乎并没有做我想要的依赖解析的东西。

4

3 回答 3

1

您可以通过包含包含下载脚本的逻辑的虚拟函数来做到这一点:

function funcA(parameter) {
  var source = loadSynchronousAjax( 'url for script A' ); // whatever function you usually use to load data synchronously
  eval( source ); // this will replace the funcA symbol with the proper implementation 
  return funcA( parameter );
}

您必须自己定义依赖关系,但解决方案应该自己处理。如果 funcA (真实的)使用另一个虚拟函数,它将以相同的方式加载。

提取公共代码:

function lazyFunction( obj, url, name ) {
  obj[name] = function () {
    var source = loadSynchronousAjax( url );
    eval( source ); 
    return obj[name].apply( obj, arguments );  
  };
}

lazyFunction( window, 'url for script A', 'funcA' );
lazyFunction( window, 'url for script B', 'funcB' );
lazyFunction( window, 'url for script B', 'funcC' );

这将定义两个具有三个延迟加载的函数的脚本。

我应该补充一点,我认为同步加载脚本不是一个好主意,但是如果惰性函数应该看起来像普通函数,那就没有太多选择了。

如果您可以将惰性函数的签名更改为异步调用,这实际上可能是一个值得的模式。

于 2013-01-03T13:54:44.980 回答
0

他们要求编写 JS 以符合他们的模式,但选项包括:

于 2013-01-03T11:52:53.107 回答
0

我不确定这是你所追求的,但 LABjs 是一个脚本加载器,可以做你想要的,文档中的一个快速示例

<script>
   $LAB
   .script("framework.js").wait()
   .script("plugin.framework.js")
   .script("myplugin.framework.js").wait()
   .script("init.js").wait();
</script>

它将允许您加载文件但不执行它们,因此您也可以等待加载依赖项。希望这是有道理的。 http://labjs.com

于 2013-01-03T11:56:05.823 回答