如何在Iron Router blaze集成上正确替换this.stop()with pause()

时间:2014-03-01 12:47:22

标签: meteor iron-router

当我将Iron Router升级到blaze集成分支时,我开始收到此警告:

"You called this.stop() inside a hook or your action function but you should use pause() now instead" 

Chrome控制台 - > iron-router.js:2104 - >来自包

的client / route_controller.js:193

代码在客户端:

Router.before(mustBeSignedIn, {except: ['userSignin', 'userSignup', 'home']});

var mustBeSignedIn = function () {
    if (!Meteor.user()) {
        // render the home template 
        this.redirect('home');
        // stop the rest of the before hooks and the action function 
        this.stop();
        return false;
    }
    return true;
}

我尝试将this.stop()替换为:pause()Router.pause()this.pause(),但仍无效。另外我还没有在铁路由器包上找到暂停功能。

如何使用this.stop()正确替换pause()

由于

2 个答案:

答案 0 :(得分:8)

从我所知的暂停函数是你的钩子被调用的第一个参数。不是在任何地方的文档中,但这是我从代码中收集的,它似乎工作。

以下是我使用的内容:

var subscribeAllPlanItems = function (pause) {
    var planId = this.params._id;
    this.subscribe('revenues', planId).wait();
    this.subscribe('expenses', planId).wait();
};

var waitForSubscriptions = function (pause) {
    if (this.ready()) {  //all the subs have come in
      //NProgress.done();
      setPlan(this.params._id);
    } else { //all subscriptions aren't yet ready, keep waiting
      //NProgress.start();
      pause();
    }
};

Router.map(function () {
    this.route('calendar', {
      path: '/calendar/:_id',
      template: 'calendar',
      before: [
        subscribeAllPlanItems,
        waitForSubscriptions
      ],
    });
    //Other routes omitted
});

var requireLogin = function (pause) {
  if (Meteor.loggingIn()) { //still logging in
    pause();
  }
  if (!Meteor.user()) {  //not logged in
    this.render('signIn');
    pause();
  } else { //logged in, life is good
    console.log("requireLogin: logged in");
  }
};

//This enforces login for all pages except the below ones.
Router.before(requireLogin, {
    except: ['landing', 'signUp', 'signIn', 'forgotPassword', 'resetPassword']
});

答案 1 :(得分:4)

我在Github上打开了issue。这是我得到的回应:

  

哎呀我可能还没有改变重定向方法。只需使用Router.go,因为它现在可以正常工作。我将在下周的某个时候更改this.redirect,或者欢迎PR。如果更改挂钩中的路径,控制器现在会自动停止。您可以通过调用pause方法暂停当前运行,该方法作为参数传递给挂钩和操作函数。