流星,铁路由器,过滤器,重定向,延迟

时间:2014-12-13 14:28:14

标签: meteor delay iron-router

Router._filters = {

  isLoggedOut: function (pause) {
    if (!Meteor.userId()) {
      return this.redirect('home');
    } else {
      this.next();
    }
  },

  isLoggedIn: function (pause) {
    if (Meteor.userId()) {
      return this.redirect('dashboard');
    } else {
      this.next();
    }
  }

};

filters = Router._filters;

Router.onBeforeAction(filters.isLoggedOut, { except: [
  'home'
]});

Router.onBeforeAction(filters.isLoggedIn, { only: [
  'home'
]});

我想在铁路由器中制作过滤器,这样可以重定向到“家”。当用户没有登录并且“仪表板”时如果用户已登录。一切正常,但在第一种情况下,仪表板会显示一秒钟,然后重定向完成。我该怎样摆脱这种延迟?

1 个答案:

答案 0 :(得分:0)

我会创建一个自定义控制器。

// Global Router configuration
Router.configure({
    loadingTemplate: 'loading'
    notFoundTemplate: 'notFound'
    controller: BaseController
});

上面的代码说:"对于所有现有路径,请使用BaseController"

您的BaseController应该如下所示

BaseController = RouteController.extend({
  action: function() {
    if(!Meteor.userId()) {
      // this.render('home');
      // this.go('home);
      this.redirect('home');
    }
    else {
      // this.render('dashboard');
      // this.go('dashboard');
      this.redirect('dashboard');
    }
  }
})

如果您需要为每个站点提供更多控制权,请为您的特定站点提供一个控制器,该控制器继承自BaseController。它看起来应该是这样的

// Global Router configuration
// Remove the controller property!
Router.configure({
    loadingTemplate: 'loading'
    notFoundTemplate: 'notFound'
});

Router.map(function() {
    this.route('contact', {
        path: '/contact',
        controller: 'ContactController'
    })
});

你的ContactController应该是这样的

ContactController = BaseController.extend({
    // Do something with this given route,
    // e.g., give it a name property or so
    name: 'contact',
    action: function() {

    }
})

有关更多信息,请查看Iron.Router指南。 https://github.com/EventedMind/iron-router/blob/devel/Guide.md#route-controllers