2013-07-31 170 views
1

我正在基于流星和MeteorStreams的简单应用程序。 目的是简单: 一个用户会点击一个按钮来创建房间其他 用户将加入房间 这些用户可以用简单的消息 发射流中的创建者将监听到该消息,然后显示这些流星流:客户端不接收流

实际上:发送来自其他用户的消息(登录服务器脚本),但创建者不会收到它们。 如果我重新加载创建者的页面,那么它会从其他用户发送消息。

我不明白为什么它第一次不起作用。

我使用meteor-router作为我的路由系统。 代码可以在这里

https://github.com/Rebolon/MeetingTimeCost/tree/feature/pokerVoteProtection

看到了客户端代码在客户端/视图/扑克/ *和客户端/佣工 服务器流的代码是在服务器/ pokerStreams是availabel。 js

应用程序可以在这里测试:http://meetingtimecost.meteor.com 创建者必须被记录。

如果您有任何想法,欢迎任何帮助。 谢谢

回答

2

好吧,好的, 做了一些调试之后,我现在明白了我的代码有什么问题: 其实很简单。问题来自于我忘记将Stream.on事件绑定到Deps.autorun。 结果是这部分代码不是由反应性管理的,所以当Session改变时它不会自动重新运行。

该解决方案是很容易与流星:只是包装的Deps.autorun

Meteor.startup(function() { 
    Deps.autorun(function funcReloadStreamListeningOnNewRoom() { 
    PokerStream.on(Session.get('currentRoom') + ':currentRoom:vote', function (vote) { 
     var voteFound = 0; 
     // update is now allowed 
     if (Session.get('pokerVoteStatus') === 'voting') { 
     voteFound = Vote.find({subscriptionId: this.subscriptionId}); 
     if (!voteFound.count()) { 
      Vote.insert({value: vote, userId: this.userId, subscriptionId: this.subscriptionId}); 
     } else { 
      Vote.update({_id: voteFound._id}, {$set: {value: vote}}); 
     } 
     } 
    }); 
    }); 
}); 

内的这部分代码所以它不是一个流星群的问题,而只是我的错。 希望它能帮助人们理解在Template和Collection之外,如果你想要反应性,你需要将你的代码包装在Deps中。

+0

你应该接受你自己的答案,因为它是正确的。 – foobarbecue