【问题标题】:this.next() error in Meteor Iron RouterMeteor Iron 路由器中的 this.next() 错误
【发布时间】:2015-08-22 01:16:04
【问题描述】:

在 Meteor 中遇到一个奇怪的错误:

路由调度从未渲染。您是否忘记在 onBeforeAction 中调用 this.next()?

并且没有任何内容正在呈现。我怎样才能解决这个问题?非常感谢任何帮助。

这是我的 router.js

Router.configure({
    layoutTemplate: 'layout',
});

Router.route('/', function() {
    this.render('home');
});

Router.route('/user/:_username', {
  name: 'user_profile',
  data: function() { return Meteor.user();} 
});

Router.route('/create', function() {
  this.render('create_event');
});

Router.route('/events/:name', {
  name: 'event',
  data: function() { return Events.findOne({name: this.params.name});}
});



Router.route('/useremail', function() {
    this.render('userEmail');
}, {
    name: 'userEmail'
});

Router._filters = {
  hasCompletedProfile: function() {
    if(!this.ready()) return;
    var user = Meteor.user();
    if (user && ! userProfileComplete(user)){
      this.render('userEmail');
    } else {
      this.next();
    }
  },
};

filters = Router._filters;
Router.onBeforeAction(filters.hasCompletedProfile);

【问题讨论】:

  • this.next() 必须始终调用,只需将其放在 if 块外最后一行的 _filters 方法中
  • 具体在哪里?尝试了 _filters 方法中的一些不同点,但目前还没有工作...谢谢
  • 在hasCompletedProfile函数中最后一条语句必须是this.next(),没有这个else块——即使你渲染了一些东西你仍然需要调用this.next()

标签: javascript meteor routing iron-router


【解决方案1】:

确保您始终在您的Router._filters 方法中调用this.next();,而不仅仅是在某个条件下。

尝试将您的 Router._filters 方法替换为:

Router._filters = {
  hasCompletedProfile: function() {
    if(!this.ready()) return;
    var user = Meteor.user();
    if (user && ! userProfileComplete(user)){
      this.render('userEmail');
    }
    this.next();  // Take note, it is no longer in an else statement
  },
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2015-10-16
    • 2015-05-12
    • 2016-06-22
    相关资源
    最近更新 更多