我正在尝试为聊天室功能做一个pub / sub。我需要做的是,发布“Chatrooms”的子集,其中包含字段user1 =当前用户ID,或者其具有字段user2 =当前用户ID的位置。所以我的代码在coffeescript中看起来像这样:
Meteor.publish "chatrooms1", publishFunction1 = ->
Chatrooms.find
user1: @userId
Meteor.publish "chatrooms2", publishFunction2 = ->
Chatrooms.find
user2: @userId
在我的订阅中,如果用户已登录,我希望它只订阅聊天室:
Router.map () ->
@route 'home',
path: '/'
waitOn: ->
[
Meteor.subscribe('users')
Meteor.subscribe('instruments')
Meteor.subscribe('instrumentList')
]
if Meteor.user()
waitOn: ->
[
Meteor.subscribe('chatrooms1')
Meteor.subscribe('chatrooms2')
]
不确定我在这里做错了什么,pub / sub不能正常工作,因此页面无法加载。 在这一步之后,我将尝试使子部分中的if Meteor.user()处于反应状态,但这将在稍后进行。
答案 0 :(得分:0)
我认为这主要是一个CoffeeScript问题 - 你不能在对象文字的中间有一个if
(如果有疑问,你可以将代码粘贴到&#中39;尝试coffeesctipt' tab here)。已编译的代码不会将第二个waitOn
添加到您的路线中。尝试这样的东西:
Router.map ->
@route 'home',
path: '/'
waitOn: ->
subs = [
Meteor.subscribe 'users'
Meteor.subscribe 'instruments'
Meteor.subscribe 'instrumentList'
]
if Meteor.user()
subs.push Meteor.subscribe 'chatrooms1'
subs.push Meteor.subscribe 'chatrooms2'
subs
或者,您可以将聊天室出版物简化为一个功能:
Meteor.publish 'chatrooms', ->
return @ready() unless @userId
Chatrooms.find $or: [{user1: @userId}, {user2: @userId}]
请注意,如果用户未登录,它会立即返回就绪状态。然后您的路线将是:
Router.map ->
@route 'home',
path: '/'
waitOn: -> [
Meteor.subscribe 'users'
Meteor.subscribe 'instruments'
Meteor.subscribe 'instrumentList'
Meteor.subscribe 'chatrooms'
]