0

我有这个 js 文件,其中包含一些功能,例如 file x.js

我需要x.js在其他文件中重用这些函数,所以我不会两次编写相同的函数。我尝试了“dojo/request/script”,但它不起作用。

关于如何导入这些功能有什么建议吗?

4

1 回答 1

2

理想情况下,您应该将文件制作成 AMD 模块。例如,如果您my/AB.js包含以下内容:

function f1(x) { /*..*/ }
function f2(y) { /*..*/ }

您应该将其重写为:

define([], function() {
  return {
    f1: function(x) { /*..*/ },
    f2: function(y) { /*..*/ }
  }
});

然后,在您的其他 javascript 文件中,您可以使用require它来加载它。

require(['my/AB'], function(AB) {
  AB.f1('foo');
  AB.f2('bar');
});

请注意,没有.js扩展my/AB!)

这样做的好处是您的函数AB.js不再在全局范围内,即它们不会与其他人的函数发生冲突。它还允许您稍后使用 Dojo 构建系统部署优化的组合文件。

然而,这并不总是可能的。也许其他 JS 文件依赖f1f2处于全局范围内。但是您也可以使用 Dojo 的加载器加载非 AMD 的常规文件,只需添加.js扩展名即可。

require(['my/AB.js'], function() {
  window.f1('foo');
  window.f2('bar');
});

请注意,在所有这些情况下,我都假设您的代码位于名为my. 无论您实际调用什么目录,您都需要在 dojoConfig.xml 中告诉 Dojo 加载程序。

<script type="text/javascript">
  var dojoConfig = {
    baseUrl: ".....",
    // your other config parameters,
    packages: [ 'my', '../folder/relative/to/baseUrl/my' ]
  };
</script>
<!-- your inclusion of dojo.js somewhere below this -->

PS:您实际上也可以从任意位置加载 JS 文件:

require(['http://example.com/js/my/AB.js'], function() {
  window.f1('foo');
  window.f2('bar');
});
于 2013-10-08T11:46:37.750 回答