我有一个js文件:
function library_f() {
}
function some_f() {
library_f();
}
function another_f() {
library_f();
}
但代码看起来很难看,我决定将我的js文件拆分为三个:
one.js:
function library_f() {
}
two.js:
function some_f() {
library_f();
}
three.js所:
function another_f() {
library_f();
}
但现在我收到错误
library_f() is not defined
如何设置包含我的js文件的顺序?
答案 0 :(得分:20)
来自docs:
首先加载应用程序根目录下的lib目录中的文件。 匹配main。*的文件将在其他所有文件后加载。
子目录中的文件在父目录中的文件之前加载,因此最先加载最深子目录中的文件(在lib之后),并且最后加载根目录中的文件(除了main。*)。 / p>
在目录中,文件按文件名的字母顺序加载。
这些规则堆栈,因此在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
答案 1 :(得分:2)
Meteor挖掘所有JS文件并将它们放入一个文件中,而且顺序不是你可以控制的。
我认为这里的问题是:你从哪里调用函数?如果他们马上自行执行,那么订单可能很重要。但是,Meteor通常会将函数加载到DOM中,然后运行它们以响应某些事件,例如Meteor.startup(callback)
或Template.page.rendered(callback)
。在这些示例中执行时,您的所有JS文件都已加载,您的所有函数都应该准备就绪,无论您喜欢什么顺序。
如果您不是在创建它们之后立即尝试运行它们,那么值得在浏览器控制台中检查,您可以看到在页面加载后这些功能都存在于DOM中。输入library_f
并查看返回的内容。