Maison > Questions et réponses > le corps du texte
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 ?
大家讲道理2017-07-05 10:57:22
Pas de problème comme mentionné ci-dessus, utilisez simplement bind, ou vous pouvez simuler vous-même une liaison,
Function.prototype.NewBind = function(obj){
var _self = this;
return function(){
_self.call(obj,arguments);
};
};
//调用的话
getPreZoom: function (e) {
this._preZoom = this._map.getZoom();
}.NewBind(this)
//和bind一样
習慣沉默2017-07-05 10:57:22
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.