Birden fazla WMS sunucusuna bağlanabilmeli, WMS Yeteneklerini sormalı ve sunucular tarafından bildirilen katmanları gösterebilmelidir OpenLayers3'ün üzerine kurulu bir web haritası istemcisini uygulıyorum.Her işlevde nasıl bağlanır (bu)?
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));
};
Yukarıdaki kod çalışıyor ama bind(this)
I MyMapClient
'ın örneğinin "özel" değişkenlerine erişim gerektiren bir işlevi çağırmak istediğiniz her zaman var. Okunabilirlikten ödün vermeden, örnek içeriğe sürekli olarak erişmenin daha iyi bir yolu yok mu?
Bu işe yaramaz: "parse_capabilities" yönteminin içindeki "this", "instance" bağlamına değil jQuery'nin içeriğine bağlı olmaz (çünkü parse_capabilities' olarak adlandırılan jQuery'dir. –
Bu yaklaşımı zaten önerdim şimdi silindi) - OP bu yöntemin farkında olduğunu (muhtemelen bu soruya göre düzenlemesi gerektiğini) söylüyor, ancak mümkünse kaçınmak istiyor ve @deceze doğru bir şekilde işaret ediyor: "Bu, o zaman (self.parse_capabilities)" için hiç yardımcı değil. " –
Düzenlendi, şimdi çalışmalı, daha az" güzel "olsa da ... belki de 'bind()' daha iyi olurdu. –