1

他のすべてが前にロードされることを保証するために、どこに Tracker.autorun を配置するのか疑問に思っています。と思いました

Meteor.startup(function(){...});

はこのような状況で使用されますが、mdg:geolocation から Geolocation オブジェクトを参照すると、まだ定義されていないことがわかります。

キャッチされていない TypeError: null のプロパティ 'lng' を読み取れません

私は次の回避策を使用しますが、より洗練された解決策があることを願っています。

 Meteor.startup(function () {
    trackerGeolocationInit = setInterval(enableLocationTracking, 100);
});

enableLocationTracking = function(){

    var location = Geolocation.latLng();
    if(location === null)
        return;
    else
        clearInterval(trackerGeolocationInit);

    Tracker.autorun(function () {
        var location = Geolocation.latLng();
        Meteor.users.update(Meteor.userId(), {
            $set: {
                "profile.location": {
                    type: 'Point',
                    coordinates: [location.lng, location.lat]
                }
            }
        });
    });
}
4

1 に答える 1

2

私は楽しみのためにアプリを書いていますが、これはうまくいきます:

   Tracker.autorun(function () {
      if(Meteor.userId())
      {
        var latLng = Geolocation.latLng();
        var userId = Meteor.userId();
        if(latLng &&  userId)
        {
          //do something
        }
     }
    });

間隔を使用する必要はありません。geolocation.js というファイルを呼び出すだけです。

于 2015-12-10T15:45:31.297 に答える