【问题标题】:meteor where to put global tracker.autorun流星放置全局tracker.autorun的位置
【发布时间】:2015-12-10 15:32:04
【问题描述】:

我想知道在哪里放置 Tracker.autorun 以保证之前加载所有其他内容。 我以为

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

用于这种情况,但是当我从 mdg:geolocation 引用 Geolocation 对象时,它告诉我它尚未定义:

未捕获的类型错误:无法读取 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]
                }
            }
        });
    });
}

【问题讨论】:

  • IIRC,第一次读取是null。仅当它不是null 时才尝试继续,并且一旦更新它就会重新运行。顺便说一句,我不会创建通过 setInterval() 运行的 autorun 内部代码

标签: javascript meteor meteor-tracker


【解决方案1】:

我正在编写一个有趣的应用程序,这很有效:

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

无需使用间隔。我只是放入了一个名为 geolocation.js 的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 2019-01-06
    • 2015-06-12
    • 2015-04-15
    相关资源
    最近更新 更多