2014-09-07 2 views
0

Эй, у меня есть система, где зарегистрированный пользователь может находиться в «битве», и как только они появятся, я хочу, чтобы пользователь был заблокирован на заданном шаблоне, пока битва не будет выполнена.Застрял при загрузке шаблона

У меня есть

# 
# Currently active battle 
# 
Meteor.publish 'activeBattle', -> 
    character = Characters.findOne(userId: this.userId) 
    if this.userId and character 
    return Battles.find({active: true, $or: [{characterOneId: character._id}, {characterTwoId: character._id}]}) 
    else 
    return 

и в моем железо-маршрутизатор

Router.configure 
    layoutTemplate: 'layout' 
    loadingTemplate: 'loading' 
    waitOn: [ 
    Meteor.subscribe('activeBattle') 
    ] 

... 

redirectToActiveBattle = (pause) -> 
    battle = Battles.findOne(active: true) 
    if battle and Meteor.userId() 
    throwError('You have a battle in progress.') 
    Router.go('combat', {_id: battle._id}) 
    pause() 

... 

Router.onBeforeAction(redirectToActiveBattle, except: ['login', 'logout', 'signup', 'combat']) 

Это работает, когда пользователь вошел в систему и имеет характер, но если нет, то страница застревает на загрузке шаблон, вместо отображения экрана входа в систему

+0

Попробуйте 'return []' вместо того, чтобы просто 'return' в' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. – lbergnehr

ответ

1

На самом деле, вы должны использовать this.ready(); вместо пустого возврата, если вы не хотите ничего возвращать в публикации. Таким образом, правильный способ публикации может быть следующим:

Meteor.publish 'activeBattle', -> 
    character = Characters.findOne(userId: this.userId) 
    if this.userId and character 
    return Battles.find({active: true, $or: [{characterOneId: character._id}, {characterTwoId: character._id}]}) 
    this.ready() 
Смежные вопросы