将Meteor Iron-router中的onBeforeAction挂钩移动到不同的文件中

时间:2015-09-30 10:33:32

标签: javascript meteor iron-router

我使用以下函数作为onBeforeAction钩子的帮助器:

var gameFilter = function () {
    this.subscribe('singleGame', this.params.slug);
    var game = this.data();
    if (game) {
        if (game.multiplayer) {
            this.redirect('multiPlayerPage', {slug: this.params.slug});
        } else {
            this.subscribe('singlePlayerPage', this.params.slug);
        }
    } else {
        this.render(this.notFoundTemplate);
    }
    this.next();
};

我在我的路线中使用它:

onBeforeAction: [gameFilter, playerFilter]

现在这很棒。但是,我想将所有过滤器移动到不同的文件。所以我在lib目录中创建了一个新文件,并将以下代码放在:

gameFilter = function () {
    this.subscribe('singleGame', this.params.slug);
    var game = this.data();
    if (game) {
        if (game.multiplayer) {
            this.redirect('multiPlayerPage', {slug: this.params.slug});
        } else {
            this.subscribe('singlePlayerPage', this.params.slug);
        }
    } else {
        this.render(this.notFoundTemplate);
    }
    this.next();
};

问题是,我得到一个ReferenceError,说没有定义gameFilter。我认为这个问题是由Meteor的文件加载顺序引起的。有可能解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我和Meteor有类似的问题。解决方法是将文件或文件夹的名称更改为数字,以便首先加载它。在我的情况下,它是一个名为media.js的文件,我改为1_media.js并且它有效