Sto implementando un client di mappe Web basato su OpenLayers3 che dovrebbe essere in grado di connettersi a più server WMS, richiedere funzionalità WMS e mostrare i livelli pubblicizzati dai server.Come evitare il bind (questo) su ogni funzione?
var MyMapClient = function(params) {
this.wms_sources_ = params.wms_sources;
this.wms_capabilities_ = [];
}
MyMapClient.prototype.parse_capabilities = function(index) {
var capabilities = this.wms_capabilities_[index];
// do something with capabilities
}
MyMapClient.prototype.load_wms_capabilities = function() {
var parser = new ol.format.WMSCapabilities();
jQuery.each(this.wms_sources_, (function (index, wms_source) {
console.log("Parsing " + wms_source.capabilities_url);
jQuery.when(jQuery.ajax({
url: wms_source.capabilities_url,
type: "GET",
crossDomain: true,
})).then((function (response, status, jqXHR) {
var result = parser.read(response);
console.log("Parsed Capabilities, version " + result.version);
this.wms_capabilities_[index] = result;
return index;
}).bind(this)).then(this.parse_capabilities.bind(this));
}).bind(this));
};
Il codice di cui sopra funziona bene, ma devo bind(this)
ogni volta che voglio chiamare una funzione che ha bisogno di accedere alle variabili "privati" di esempio MyMapClient
s'. Non esiste un modo migliore per accedere coerentemente agli interni delle istanze, senza sacrificare la leggibilità?
Questo non funzionerà: il metodo 'this' all'interno di' parse_capabilities' non sarebbe legato al contesto di "istanza" ma al contesto di jQuery (perché è jQuery che chiama 'parse_capabilities'. –
Ho già suggerito questo approccio (ora cancellato) - OP dice di essere a conoscenza di questo metodo (probabilmente dovrebbe modificarlo nella domanda) ma vuole evitare se possibile, e @deceze ha giustamente sottolineato "Questo non aiuta per' then (self.parse_capabilities) 'a tutti " –
Modificato, dovrebbe funzionare ora, meno" bello "anche se ... forse' bind() 'sarebbe solo meglio –