Comment exécuter une fonction d'assistance après le DOM est prêt dans le météore

J'ai une liste de <li>'qui est renseigné avec un find() à l'aide d'un Météore.démarrage comme vous le voyez ci-dessous. Puis je reçois tous les attributs de données de ces <li>'s à l'aide des données() et de le mettre dans un objet et d'essayer de retourner la console.journal afin que je puisse voir si cela fonctionne. Mais je suis null.

    Meteor.startup(function () {
    Template.messages.lists = function () {
        var allitems = lists.find();
        return allitems;
    };
    var map;
    map = new GMaps({
        div: '#map_canvas',
        lat: -12.043333,
        lng: -77.028333
    });
    var lat = map.getCenter().lat();
    var lng = map.getCenter().lng();
    map.addMarker({
        lat: lat,
        lng: lng,
        draggable: true,
        title: 'Test',
        dragend: function (e) {
            $('#lat').val(this.getPosition().lat());
            $('#lng').val(this.getPosition().lng());
        }
    });
    console.log(getMarkers());
});


function getMarkers() {
    var coordinates = {};
    coordinates = $('li.message').data();
    return coordinates;
}

J'ai essayé la même chose dans ma console directement et ça marche - je obtenir un objet en arrière - donc je suppose que le DOM n'est pas prêt/rempli avant que cette fonction est exécutée.

Je vais avoir du mal à comprendre la différence entre les choses comme un Météore.démarrage et le Modèle.monmodèle.rendue. Dans ce cas, il semble qu'aucun d'entre eux fonctionne comme je veux?

Quel est le bon chemin/lieu de faire des trucs avec les DOM (la traversée,l'obtention d'attributs,de la manipulation)?

modifier

que le code a changé beaucoup de choses afin de faire ce que je voulais, je poste le tout.

Meteor.startup(function () {
  var map;
  map = new GMaps({
    div: '#map_canvas',
    lat: 50.853642,
    lng: 4.357452
  });
  Meteor.subscribe('AllMessages', function() {
    var allitems = lists.find().fetch();
    console.log(allitems);
    allitems.forEach(function(item) { 
      var lat = item.location.lat; 
      var lng = item.location.lng;
      console.log('latitude is: ' + lat);
      console.log('longitude is: ' + lng);
      map.addMarker({ 
        lat: lat, 
        lng: lng, 
        draggable: true, 
        title: 'Test', 
        dragend: function(e) { 
          $('#lat').val(this.getPosition().lat()); 
          $('#lng').val(this.getPosition().lng()); 
        } 
      }); 
    });
  });
});

Le code ci-dessus crée une nouvelle carte de google (à l'aide de la GMaps.js plugin) à l'intérieur d'un Météore.De démarrage, puis, dans un imbriquée Abonnez-vous fetchs tous les documents d'une collection, forEaches les résultats et obtient les valeurs de latitude et longitude, puis sur pour ajouter des marqueurs dans la carte de google...

edit 2

J'ai fait ma "carte" de la variable globale, de cette façon pas besoin de nid .abonnez-vous et .de démarrage. :

Meteor.subscribe('AllMessages', function() {
  var allitems = lists.find().fetch();
  console.log(allitems);
  allitems.forEach(function(item) { 
    var lat = item.location.lat; 
    var lng = item.location.lng;
    console.log('latitude is: ' + lat);
    console.log('longitude is: ' + lng);
    map.addMarker({ 
      lat: lat, 
      lng: lng, 
      draggable: true, 
      title: item.description, 
      dragend: function(e) { 
        $('#lat').val(this.getPosition().lat()); 
        $('#lng').val(this.getPosition().lng()); 
      } 
    }); 
  });
});

Meteor.startup(function () {
  map = new GMaps({
    div: '#map_canvas',
    lat: 50.853642,
    lng: 4.357452
  });
});

Template.messages.lists = function () {
  var allitems = lists.find().fetch();
  return allitems;
}

OriginalL'auteur George Katsanos | 2013-03-09