5

我有一个js文件:

function library_f() {
}

function some_f() {
  library_f();
}

function another_f() {
  library_f();
}

但是代码看起来很难看,我决定将我的 js 文件拆分为三个:

一个.js:

function library_f() {
}

二.js:

function some_f() {
  library_f();
}

三.js:

function another_f() {
  library_f();
}

但现在我得到错误

library_f() is not defined

如何设置顺序以包含我的 js 文件?

4

2 回答 2

20

文档

  • 首先加载应用程序根目录下的 lib 目录中的文件。匹配 main.* 的文件在其他所有内容之后加载。

  • 子目录中的文件在父目录中的文件之前加载,因此最深的子目录中的文件首先加载(在 lib 之后),而根目录中的文件最后加载(除了 main.*)。

  • 在目录中,文件按文件名的字母顺序加载。

这些规则堆叠起来,例如在 lib 中,文件仍然按字母顺序加载;如果有多个名为 main.js 的文件,则子目录中的文件会更早加载。

但看起来这些函数无法访问,因为它们不是全局的。在meteor中,每个文件的变量/函数不能被另一个文件访问,除非变量或函数是全局的。

因此,您需要以这种方式声明您的函数:

library_f = library_f() {
...
}

以便其他文件可以访问它。变量也是如此:

var x = true; //Not accessible by other files
x = true; //Accessible by other files

var dothis = function () {...} //Not accessible by other files
dothis = function() {..} //Not accessible by other files
function dothis() {..} //Not accessible ny other files
于 2013-04-23T10:37:02.347 回答
3

Meteor 把你所有的 JS 文件都收集起来,放到一个文件中,顺序不是你能控制的。

我认为这里的问题是:你从哪里调用函数?如果他们立即自动执行,那么您说得对,订单可能很重要。但是,Meteor 通常将函数加载到 DOM 中,然后运行它们以响应诸如Meteor.startup(callback)or之类的事件Template.page.rendered(callback)。在这些示例中执行时,您的所有 JS 文件都将被加载,并且您的函数应该都准备就绪,可以按照您喜欢的任何顺序运行。

如果您不想在创建它们后立即运行它们,那么值得在浏览器控制台中检查,您可以看到这些函数在页面加载后都存在于 DOM 中。输入library_f并查看返回的内容。

于 2013-04-23T17:19:41.700 回答