2015-04-19 1 views
1

Когда пользователь сначала загружает сайт без входа в систему, затем регистрируется, маршрут account, определенный ниже, будет разрешен до /profile/null. Пользователь должен обновить сайт до того, как маршрут маршрута станет правильным.Meteor.userId() не определено в маршруте железного маршрутизатора после входа в систему

this.route('account', { 
    template: 'profile', 
    path: '/profile/' + Meteor.userId() 
}) 

Причина создания маршрута специально принять параметр Meteor.userId() потому, что я использую package, что требует от меня, чтобы определить имя path, то есть: {{> ionTab title="Account" path="account"}}, которые я не думаю, что может принимать параметр.

Какой способ улучшить этот маршрут?

ответ

1

Определение маршрута происходит один раз, когда запускается приложение, в это время Meteor.userId() до сих пор не определена, так вот почему ваш код не работает, но в целом подход является неправильным, вместо этого вы должны определить свой маршрут следующим образом:

Router.route("/profile/:_id",{ 
    name:"profile", 
    template:"profile", 
    waitOn:function(){ 
    return Meteor.subscribe("userProfile",this.params._id); 
    }, 
    data:function(){ 
    var user=Meteor.users.findOne(this.params._id); 
    return { 
     user:user 
    }; 
    } 
}); 

Что вы, возможно, пропустили в документах iron:router, это возможность определить маршруты с использованием параметра (/path/:param) и использовать этот параметр для настройки подписки на маршруты и контекста данных.

EDIT

Если вы хотите, чтобы получить соответствующий динамический путь для этого маршрута, вы можете использовать path метод:

HTML

<template name="myTemplate"> 
    {{> ionTab title="Account" path=accountPath}} 
</template> 

JS

Template.myTemplate.helpers({ 
    accountPath:function(){ 
    return Router.path("profile",Meteor.user()); 
    } 
}); 
+0

Спасибо, Я использую [пакет] (https://github.com/meteoric/meteorion), который требует от меня укажите имя пути, т. е.: {{>> ionTab title = "Account" path = "account"}} ', который, как я думаю, не может принимать параметр – Nyxynyx

+0

Проверьте мое редактирование, вы можете получить динамически вычисленный маршрут маршрута, настроенный параметр. Имя параметра маршрута должно соответствовать свойству в объекте, переданном как второй аргумент в 'Router.path'. – saimeunt

+0

Получил правильный путь в консоли браузера JS, когда я использовал 'Router.path ('profile', {'user_id': Meteor.userId()})'. Использование 'Router.path (« profile », Meteor.user());' дал 'null', хотя ... – Nyxynyx