我正在使用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示例是否有效?
答案 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!");
}
});
}
});