如何在Meteor中提交帖子时有效存储用户的位置?

时间:2015-07-23 09:49:19

标签: javascript meteor geolocation

我正在使用mdg:geolocation包。 我试图在他或她提交消息时存储用户位置。


在postSubmit.js(客户端):

Template.postSubmit.events({'submit form': function(e) {e.preventDefault();
    var post = {
      message:  $(e.target).find('[name=message]').val(),
      loc: {
        type:"Point",
        coordinates: [82.1, 55.4] //fake data 
      }
    };

此外,我需要行来提交用户提交消息时的当前位置。

Template.postSubmit.onCreated(function() {  
  'loc': function() {                     //doesnt work, identifier error
      Session.set("loc", Geolocation.latLng());
  },

我看到了代替这个版本的例子,但它给了我错误 Meteor Geolocation method from Event

我的问题是  1.如何用检索到的{lng,lng}替换假数据进行更新?  2. template.onRendered示例是否有效?

1 个答案:

答案 0 :(得分:2)

如果您在发布消息时只需要它,则无需将其存储在会话中。您只需要在提交活动中获取它。

Template.postSubmit.events({'submit form': function(e) {e.preventDefault();
  var loc = Geolocation.latLng();
    var post = {
      message:  $(e.target).find('[name=message]').val(),
      loc: {
        type:"Point",
        coordinates: [loc.lng, loc.lat]
      }
    };
    Meteor.call('postInsert', post, function (err, res) {
      if (!err)
        console.log("inserted!");
    });
  }
});

如果您希望在整个发布过程中提供地理位置,最简单的方法是使用轮询和会话变量:

Template.postSubmit.onCreated(function() {  
  this.interval = Meteor.setInterval(function () {
    Session.set('location', Geolocation.latLng());
  }, 2000); // get location every 2 seconds
});

然后,您可以使用模板助手检索它:

Template.postSubmit.helpers({  
  'loc': function () {
    return Session.get('location');
  }
});

您可以在提交帖子时停止间隔:

Template.postSubmit.events({'submit form': function(e, t) {
  e.preventDefault();
  var loc = Session.get('location');
    var post = {
      message:  $(e.target).find('[name=message]').val(),
      loc: {
        type:"Point",
        coordinates: [loc.lng, loc.lat]
      }
    };
    Meteor.call('postInsert', post, function (err, res) {
      if (!err) {
        Meteor.clearInterval(t.interval);
        console.log("inserted!");
      }
    });
  }
});