首先,我熟悉Meteor docs say about this,我在这里总结了一下:
子目录中的文件在父文件中加载 目录,以便加载最深子目录中的文件 首先,最后加载根目录中的文件。
在目录中,文件按字母顺序加载 文件名。
如上所述排序后,所有目录下的文件都名为 lib在其他所有内容之前移动(保留其顺序)。
最后,所有匹配main。*的文件都会被移动 (保留他们的命令)。
(不知道他们为什么说"移动"而不是"加载",但我认为他们只是意味着"加载"。)
我的应用具有以下结构:
├── client/
│ ├── html/
│ │ ├── main.html
│ │ ├── nav.html
│ │ └── login.html
│ ├── js/
│ │ ├── lib/
│ │ │ └── util.js
│ │ ├── main.js
│ │ └── nav.js
│ └── my_app.less
├── packages/
│ └── some_stuff_here
├── server/
│ └── main.js
├── shared.js
├── smart.json
└── smart.lock
在client/js/nav.js
文件中,我有以下JavaScript代码:
Template.nav.nav_close = function() {
return ! Session.get(slugify(this.name)+'-nav-close')
}
在client/js/lib/util.js
文件中,我有以下JavaScript代码:
var slugify = function(value) {
if (value) {
return value.replace(/\s+/g, '-').replace(/\./g, '-').toLowerCase();
}
}
我的理解是client/js/lib/util.js
文件应首先加载,这将使我的slugify
函数可用,然后client/js/nav.js
应加载,slugify
函数应该可以使用。
事实上,我在Chrome控制台中看到以下错误:
Exception from Deps recompute function: ReferenceError: slugify is not defined
at Object.Template.nav.nav_close (http://localhost:3000/client/js/nav.js?4d7c7953063828c0e4ec237c1a5c67b849076cb5:2:26)
为什么我收到此错误?
答案 0 :(得分:2)
slugify
具有文件范围,因为它是使用var
声明的。删除var
以提供包(应用程序)范围。
slugify = function(value) {
if (value) {
return value.replace(/\s+/g, '-').replace(/\./g, '-').toLowerCase();
}
}