2014-03-01 54 views
8

當我升級路由器鐵殺出集成分支,我開始收到這樣的警告:如何正確地更換this.stop()與鐵路由器火焰整合暫停()

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

Chrome的控制檯 - >鐵-router.js:2104 - >的客戶機/ 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.stop()替換爲pause()

謝謝

+0

您可以發佈您的代碼,當你嘗試更換你的錯誤消息的相關部分? –

+0

@SerkanDurusoy他..他改變this.stop()來this.pause()Router.pause()等。我也有這個問題,並重定向也不能正常工作。 – Dave

+0

@Dave他沒有發佈評論。看來下面的答案涵蓋了解決方案。 –

回答

4

我在Github上開了一個issue這一點。這是我得到的迴應:

糟糕我可能還沒有改變重定向方法呢。只需使用Router.go,因爲它現在可以正常工作。我會在下週的某個時候改變這個重定向,或者歡迎PR。如果您在掛鉤中更改路線,控制器現在會自動停止。您可以通過調用作爲鉤子和動作函數參數傳遞的暫停方法來暫停當前運行。

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'] 
}); 
+0

編輯添加代碼 – andylash