0

首先,我熟悉Meteor 文档对此的说法,我在此进行了总结:

  • 子目录中的文件在父目录中的文件之前加载,因此最深的子目录中的文件首先加载,根目录中的文件最后加载。

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

  • 如上所述排序后,名为 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)

为什么我会收到此错误?

4

1 回答 1

2

slugify具有文件范围,因为它是用 . 声明的var。删除var以赋予它包(应用程序)范围。

流星命名空间

slugify = function(value) {
    if (value) {
        return value.replace(/\s+/g, '-').replace(/\./g, '-').toLowerCase();
    }
}
于 2014-08-14T20:49:15.997 回答