How to run method on client when subscribe is complete

Here is my setup:

//in global.js file
items = new Meteor.Collection("items");

//on server in
Meteor.publish "nearItems", (lat, lng) ->
  return items.find( { loc : { $near : [lng, lat] } })

//on client in
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 

How do I call the method addMarkers when the client gets the data.

The docs say I need to call the ready method but with my current setup I am unsure how to do this as I can't call ready before the return statement because it won't be ready yet.

The Meteor.publish statement is working correctly and I get all the items on the client. But it takes a few seconds to load. So I need a way to wait until the item collection has all the data from the server. I can open the javascript console and after waiting a few seconds call addMarkers and the nearest 100 display correctly on the map.

I tried setting up a Deps.autorun(runFunc) see but for whatever reason it says the collection items doesn't exist.


I don't know why you get the error while using autorun. Maybe I can help if you paste the problematic code. The way I handle this issue is:

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"
    Session.set("loading", true)  # Do some reactive waiting based on "loading"

Need Your Help

Word XML to HTML (with styling)

php html xml ms-word

I have a word template (msword 2010) that I inject variables into using PHPWord, and would like to convert that into a PDF.