私は次の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」にアクセスできるのに「bounds」にはアクセスできないのはなぜですか?
- よりスマートなパターン(モジュール)に従ってこのコードを書き直し、スクリプトの他の部分で境界を使用できるようにし、試行中に4つのプロパティを正常に追加できるようにするにはどうすればよいですか?
イベントが発生したことを編集します-手動で発生した後でも、空のオブジェクトを取得します:
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 {}