2014-04-06 20 views

Odpowiedz

17

Oto przykład z trzema drogami: index, signin i dashboard:

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

Router.map(function() { 
    this.route('index', {path: '/'}); 
    this.route('signin'); 
    this.route('dashboard'); 
}); 

var mustBeSignedIn = function(pause) { 
    if (!(Meteor.user() || Meteor.loggingIn())) { 
    Router.go('signin'); 
    } else { 
    this.next(); 
    } 
}; 

var goToDashboard = function(pause) { 
    if (Meteor.user()) { 
    Router.go('dashboard'); 
    } else { 
    this.next(); 
    } 
}; 

Router.onBeforeAction(mustBeSignedIn, {except: ['signin']}); 
Router.onBeforeAction(goToDashboard, {only: ['index']}); 

Jeśli użytkownik znajduje się na stronie index i ona jest zalogowany, zostanie ona automatycznie przekierowany do strony dashboard. Na dowolnej stronie oprócz signin, jeśli użytkownik nie jest zalogowany, zostanie przekierowany na stronę signin. onBeforeAction jest reaktywny, więc te reguły będą egzekwowane natychmiast, jeśli użytkownik się zaloguje lub wyloguje.

Oczywiście trasy będą różne, ale mam nadzieję, że ten przykład ilustruje jeden ze sposobów, aby to zadziałało z żelaznym routerem.

Zobacz także artykuł w sekcji iron-router guide.

+0

co to jest "goToPick"? – Warz

+0

To był literówka. Dziękuję za wskazanie tego. –

+1

Stosując to podejście, należy utworzyć pusty indeks szablonu. Dobrze? W przeciwnym razie Meteor zgłasza wyjątek. –

4
var mustBeSignedIn = function(pause) { 
    if (!(Meteor.user() || Meteor.loggingIn())) { 
    Router.go('signin'); 
    } else { 
    this.next(); 
    } 
}; 

var goToDashboard = function(pause) { 
    if (Meteor.user()) { 
    Router.go('dashboard'); 
    } else { 
    this.next(); 
    } 
}; 

FYI, pause() nie jest obsługiwana teraz, po prostu zastąpić this.next()

7

Kilka rzeczy powyższe wydają się być nieaktualne. Oto, jak działam w obecnej chwili:

Router.configure({ 
    layoutTemplate: 'Layout' 
}); 

Router.map(function() { 
    this.route('index', {path: '/'}); 
    this.route('login'); 
    this.route('home'); 
}); 

var mustBeSignedIn = function() { 
    if (!(Meteor.user() || Meteor.loggingIn())) { 
     Router.go('login'); 
    } else { 
     this.next(); 
    } 
}; 
var goHome = function() { 
    if (Meteor.user()) { 
     Router.go('home'); 
    } else { 
     this.next(); 
    } 
}; 

Router.onBeforeAction(mustBeSignedIn, {except: ['login']}); 
Router.onBeforeAction(goHome, {only: ['index', 'login']}); 
Powiązane problemy