这是我的设置:
//in global.js file
items = new Meteor.Collection("items");
//on server in main.coffee
Meteor.publish "nearItems", (lat, lng) ->
return items.find( { loc : { $near : [lng, lat] } })
//on client in map.coffee
Meteor.autosubscribe ->
Meteor.subscribe( "nearItems", 37.78, -122.416, addMarkers)
addMarkers = ->
places = items.find().fetch()
console.log "Adding this many markers:", items.length
for item, i in places
theLatLng = new google.maps.LatLng(item.loc[1], item.loc[0])
addMarker theLatLng, map, item
return
当客户端获取数据时,如何调用方法addMarkers。
文档说我需要调用ready方法http://docs.meteor.com/#meteor_publish,但是对于我当前的设置,我不确定如何执行此操作,因为我无法在return语句之前调用ready,因为它还没有准备好。
Meteor.publish语句工作正常,我得到了客户端上的所有项目。但是加载需要几秒钟。所以我需要一种方法来等待项目集合包含来自服务器的所有数据。我可以打开javascript控制台,等待几秒钟后,在地图上正确调用addMarkers和最接近的100显示器。
我尝试设置Deps.autorun(runFunc),请参阅http://docs.meteor.com/#deps_autorun,但无论出于何种原因,它都说集合项目不存在。
答案 0 :(得分:4)
我不知道你在使用autorun
时遇到错误的原因。如果您粘贴有问题的代码,也许我可以提供帮助。我处理这个问题的方法是:
Meteor.autorun( =>
sub = Meteor.subscribe("collection", param1, param2)
if sub.ready() # Ready is reactive. Once it changes
# the computation is invalidated
addMarkers() # Now the data is at the client
Session.set("loading", false) # Do your main thing based on "loading"
else
Session.set("loading", true) # Do some reactive waiting based on "loading"
)