如何在 Meteor / Iron Router 中处理订阅

How to handle subscription in Meteor / Iron Router

处理基于订阅的数据的最佳方式是什么。例如,您有一款游戏,您必须先创建角色,然后才能做任何其他事情。目前我认为我可以尝试使用 onBeforeAction 过滤器来处理它。所以我为每条需要角色的路线都有一个全局控制器。

DefaultController = LayoutController.extend({
  onBeforeAction : function() {
    var currentCharacter = Character.getCurrent.call({});
    if(currentCharacter === undefined) {
        this.render('CharacterCreate');
    } else {
        this.next();
    }
 },
 waitOn() {
    this.subscribe('characters.owned');
 }
});

您有这样的路线:

Router.route('/game', { controller: 'DefaultController' });

问题是在加载集合之前,游戏模板将显示。有这样更好的方法吗?另一个问题是,当路由需要一个字符时,它会抛出异常,直到加载订阅。

只需在加载订阅时使用加载挂钩。

loading(){
  this.render('myLoadingTemplate');
}

loading 挂钩在等待订阅准备就绪时自动 运行。

您可能会发现 my post on building a clean router.js file 有用。