Javascript 在全局辅助对象(Meteor)中设置地理位置
我试图在助手中设置这样的地理位置信息。我使用这些软件包: 千年发展目标:地理定位, 奥尔德德:地理编码器 这是我的助手:Javascript 在全局辅助对象(Meteor)中设置地理位置,javascript,node.js,meteor,geolocation,google-geocoder,Javascript,Node.js,Meteor,Geolocation,Google Geocoder,我试图在助手中设置这样的地理位置信息。我使用这些软件包: 千年发展目标:地理定位, 奥尔德德:地理编码器 这是我的助手: Template.registerHelper("geo", function () { var geo = Geolocation.latLng() || { lat: 0, lng: 0 }; if(geo.lat !== 0){ var infos = Meteor.call('locationName', geo.lat, geo
Template.registerHelper("geo", function () {
var geo = Geolocation.latLng() || { lat: 0, lng: 0 };
if(geo.lat !== 0){
var infos = Meteor.call('locationName', geo.lat, geo.lng, function(err, res){
return res[0];
});
}
});
这是返回的对象
这是我的服务器呼叫
Meteor.methods({
locationName: function(lat, lng){
console.log(lat, lng);
var geo = new GeoCoder({
geocoderProvider: configs.geocoder.geocoderProvider,
httpAdapter: configs.geocoder.httpAdapter,
apiKey: configs.geocoder.apiKey
});
var reverseGeocoding = geo.reverse(lat, lng);
return reverseGeocoding;
}
});
我试了很多东西,但我的{{geo.city}总是空的。我怎样才能正确地构建它
谢谢你你正处在一个典型的问题。查看模板助手的代码。它基本上是这样做的:
Template.registerHelper("geo", function () {
// inside helper
// doing some stuff...
Meteor.call('someMethod', function(err, res){
// Other scope!
console.log("Toto, I've a feeling we're not in the `geo` helper any more.");
return res; // returning this to nowhere
});
// back inside helper
return undefined; // returns before the above callback even triggers
});
问题是,您不能从方法调用的回调返回某些内容,而期望从中调用该方法的帮助器返回此值:它们是不同的作用域,因为方法调用是异步的。以下是您可以做的:
Template.registerHelper("geo", function () {
return Session.get('locationName');
});
updateLocationName = function (geo) {
return Meteor.call('locationName', geo.lat, geo.lng, function(err, res){
Session.set('locationName', res[0]);
});
}
if (Meteor.isClient) {
Meteor.startup(function () {
var geo = Geolocation.latLng() || { lat: 0, lng: 0 };
Session.setDefault('locationName', null);
if(geo.lat !== 0){
var infos = updateLocationName(geo);
}
});
}
例如,如果您想在onRendered或autorun中更新会话变量,您只需使用更新的Geolocation.latLng对象调用updateLocationName。我使它工作了,但可能有更好的方法。谢谢你的回答!这是我的密码
Template.registerHelper("geo", function () {
if(Session.get('geolocation') === null){
var geo = Geolocation.latLng() || { lat: 0, lng: 0 };
if(geo.lat !== 0){
Meteor.call('locationInfos', geo.lat, geo.lng, function(err, res){
Session.set('geolocation', res[0]);
});
}
}
return Session.get('geolocation');
});
我在Meteor.startup中将会话变量设置为NULL。为什么使用res[0]?尝试使用res.city…我认为OP意味着res[0]包含具有city属性的对象。你是对的,但它不起作用。谢谢你关于范围的回答,我尝试了很多东西。。。在Meteor.startup中,geo变量设置为{lat:0,lng:0}。我需要在第一次加载时设置它。