来自Event的Meteor Geolocation方法

时间:2015-07-19 01:54:50

标签: meteor

我想获得latLng,但仅限于事件发生后。怎么能实现这一目标?我已经尝试过跟踪器等,但没有任何效果。唯一有效的是调用Geolocation.latLng();来自助手内部,即事件之前。

以下是我希望它能起作用的方式。我用Session.set()和Session.get()来尝试过同样的事情。我也尝试使用Tracker依赖项,但由于该位置不可用,因此立即触发changed()无效。

我应该包括我正在使用位于https://github.com/meteor/mobile-packages/的Meteor Development Group创建的软件包。

var location = {};

Template.Home.helpers({
  'location': function() {
    return location;
  }
);
Template.Home.events({
  'focus .location': function() {
    location =  Geolocation.latLng();
  },
});

2 个答案:

答案 0 :(得分:2)

我喜欢@ ZuzEL的回答,但万一你真的想按照Sessions的方式去做:

Template.Home.helpers({
  'location': function() {
    return Session.get("location");
  }
);
Template.Home.events({
  'focus .location': function() {
    Session.set("location", Geolocation.latLng());
  },
});

不需要ReactiveVar包,因为Sessions就像全局反应一样:)

答案 1 :(得分:1)

这是因为您的location本身不是反应变量。

var location = new ReactiveVar();

Template.Home.helpers({
  'location': function() {
    return location.get();
  }
);
Template.Home.events({
  'focus .location': function() {
    location.set(Geolocation.latLng());
  },
});

不要忘记包含反应性var包

  

meteor add reactive-var

但是,因为你使用的是mdg:geolocation

并且here API Doc说每个方法都是被动的,无论位置如何变化,都可以在onRendered回调中使用跟踪器

    Template.Home.onRendered(function(){
      this.autorun(function(){
         location.set(Geolocation.latLng());
      })
    });