Utilisation du framework Leaflet, préparation à l'extension d'un objet.
Le code est le suivant :
var FxtMap = L.Class.extend({
_preZoom: 4,
_initZoom: 4,
_queryScale: 7,
_map:null,
fxtData: null,
options: {
center: [31.2, 121.46715194],
zoom: 4,
crs: sh_crs,
doubleClickZoom: false,
zoomControl: false,
attributionControl: false
},
initialize: function (id, mapOption) {
if (mapOption) {
L.Util.setOptions(this, mapOption);
}
this._map = L.map(id, this.options);
m_tileLayer.addTo(this._map);
m_oldView = this._map.getBounds();
this._map.on({
zoomstart: this.getPreZoom,
zoomend: this.triggerLyrChange,
viewreset: MapViewReset,
moveend: MapDrag
});
this._map.invalidateSize("true");
},
getPreZoom: function (e) {
this._preZoom = this._map.getZoom();
},
triggerLyrChange: function () {
if (this._map.getZoom() == this._queryScale && this._map.getZoom() > this._preZoom) {
this._map.fire('jsonLyrType');
}
if (this.getZoom() == this._queryScale - 1 && this._map.getZoom() < this._preZoom) {
this._map.fire('imgLyrType');
}
},
...
})
getPreZoom et triggerLyrChange sont toutes deux des fonctions de liaison d'événements. Ceci dans la fonction est le _map de l'objet. Comment référencer correctement l'objet instancié dans cette fonction ? Puis-je utiliser uniquement FxtMap.prototype ?
Pas de problème comme mentionné ci-dessus, utilisez simplement bind, ou vous pouvez simuler vous-même une liaison,
Vous le découvrez vous-même, posez et répondez à vos propres questions.
Il s'agit d'un problème typique avec la variable 'this' dans js. Dans la fonction de liaison d'événement, la fonction de rappel est finalement appelée par l'objet de liaison d'événement, donc 'this' pointe vers l'objet à ce moment-là. souhaitez modifier la fonction de rappel. La variable 'this' pointe vers l'objet d'instance et vous devez modifier manuellement le point de celui-ci via Function.prototype.bind.