Menggunakan rangka kerja Risalah, bersedia untuk memanjangkan objek.
Kod adalah seperti berikut:
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 dan triggerLyrChange adalah kedua-dua fungsi mengikat peristiwa Ini dalam fungsi ini ialah _map bagi objek yang dirujuk dengan betul dalam fungsi ini. Bolehkah saya hanya menggunakan FxtMap.prototype?
Tiada masalah seperti yang dinyatakan di atas, hanya gunakan bind, atau anda boleh mensimulasikan bind sendiri,
Anda fikirkan sendiri, tanya dan jawab soalan anda sendiri.
Ini adalah masalah biasa dengan pembolehubah 'ini' dalam js Dalam fungsi mengikat acara, fungsi panggil balik akhirnya dipanggil oleh objek mengikat acara, jadi 'ini' pada masa ini menunjuk ke objek pada masa ini mahu menukar fungsi panggil balik Pembolehubah 'ini' menghala ke objek contoh, dan anda perlu menukar titik ini secara manual melalui Function.prototype.bind.