2015-12-19 3 views
0

Я использую Meteor с FlowRouter, и я получаю странное поведение. Мне интересно, если я просто принципиально не понимаю чего-то. У меня есть следующий код в client/route.js:Триггеры Meteor FlowRouter Начало запуска слишком рано

"use strict"; 

FlowRouter.route('/', { 
    name: 'home', 
    action: function() { 
     BlazeLayout.render('main', {main: "homePage"}); 
    } 
}); 

FlowRouter.route('/admin', { 
    name: 'admin', 
    triggersEnter: [isUserLoggedIn], 
    action: function() { 
     BlazeLayout.render('main', {main: "admin"}); 
    } 
}); 

function isUserLoggedIn() { 
    console.log("Worked"); 
    if (Meteor.userId()) { 
     route = FlowRouter.current(); 
    } else { 
     FlowRouter.go("home"); 
    } 
} 

Я бегу meteor и я хожу в localhost:3000 и я смотрю на консоли, я вижу «Работали» означает, что функция isUserLoggedIn срабатывала. Я НЕ нажал на админ или пошел на localhost:3000/admin. Только на верхний уровень. Почему была вызвана функция isUserLoggedIn, когда я не пошел на маршрут /admin?

Редактировать 1: Казалось бы, мой упрощенный пример действительно работает очень хорошо. Реальная проблема на самом деле немного больше, как это:

"use strict"; 

FlowRouter.route('/', { 
    name: 'home', 
    action: function() { 
     BlazeLayout.render('main', {main: "homePage"}); 
    } 
}); 

FlowRouter.route('/admin', { 
    name: 'admin', 
    triggersEnter: [isUserLoggedIn(role)], 
    action: function() { 
     BlazeLayout.render('main', {main: "admin"}); 
    } 
}); 

function isUserLoggedIn(role) { 
    console.log("Worked"); 
    if (Meteor.userId() && Role.userIsInRole(role)) { 
     route = FlowRouter.current(); 
    } else { 
     FlowRouter.go("home"); 
    } 
} 

Передача параметров через triggersEnter не представляется возможным (или я не в курсе о том, как заставить ее работать должным образом). Есть ли способ отправить параметр через triggersEnter?

ответ

2

Вы должны вернуть функцию из вашей isUserLoggedIn функции, например:

function isUserLoggedIn (role) { 
    return function (context, redirect, stop) { 
    if (Meteor.userId() && Roles.userIsInRole(Meteor.userId(), role)) { 
     route = FlowRouter.current(); 
    } else { 
     FlowRouter.go("home"); 
    } 
    } 
} 
+0

К началу! Единственный способ работать для меня, но с обновлением в строке 3: 'if (Meteor.userId() && Roles.userIsInRole (Meteor.userId(), role)) {' – Arthur

+0

Спасибо, что указали это. Я исправил. Рад, что он работает –

Смежные вопросы