我有以下JS:
Meteor.startup(function () {
map = L.map('map_canvas').locate({setView: true, maxZoom: 21});
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
bounds = {};
map.on('locationfound', function(e){
bounds.bottomLeftLat = map.getBounds()._southWest.lat;
bounds.bottomLeftLng = map.getBounds()._southWest.lng;
bounds.topRightLat = map.getBounds()._northEast.lat;
bounds.topRightLng = map.getBounds()._northEast.lng;
console.log(bounds);
});
console.log('outside function: '+bounds);
});
我的第一个 console.log 在控制台中正确输出了 4 个对象属性及其值,但是外部函数日志输出一个空对象,当我尝试访问 Meteor.startup 之外的边界时,它甚至都没有定义。我知道函数限制了变量的范围,但是如果在匿名函数之外定义了边界,没有'var',它不被认为是全局的吗?
- 为什么我可以在 Meteor.startup 之外访问“地图”而不是“边界”?
- 如何通过遵循更多智能模式(模块?)来重写此代码,以便我既可以在脚本的其他部分提供边界,又可以在尝试时成功添加四个属性?
编辑事件被触发 - 手动触发后,我仍然得到一个空对象:
map.fire("locationfound");
Object {type: "locationfound", target: e, bottomLeftLat: 50.05008477838258, bottomLeftLng: 0.384521484375, topRightLat: 51.63847621195153…}
MainClient.js:12
e {options: Object, _container: div#map_canvas.leaflet-container leaflet-fade-anim, _panes: Object, _mapPane: div.leaflet-map-pane, _tilePane: div.leaflet-tile-pane…}
bounds
Object {}