Добрый день.
В общем, сейчас изучаю GMap API и возникла проблема.
Gmap я указал на всякий случай, знание его необязательно, чтобы помочь мне, главное - это javascript.
Gmap предоставляет метод GDownloadUrl(имя_файла, колбек)
Выглядит это примерно так
GDownloadUrl("data.xml", function(data, responseCode) {
//какой-нибудь код
});
Вот мой код
function Streets() {
this.map = new GMap2(document.getElementById("map_canvas"));
this.init();
// temp - просто переменная для проверки.
this.temp = 'ok';
this.load();
}
Streets.prototype = {
init: function() {
this.map.setCenter(new GLatLng(51.6538, 30.1749), 12);
this.map.addControl(new GLargeMapControl());
this.map.addControl(new GMapTypeControl());
},
load: function() {
GDownloadUrl("data.xml", this.parseXML);
},
parseXML: function(data, responseCode) {
// что-нибудь делаем
}
};
В моем методе load вызывает гуглевский метод GDownloadUrl, который просто загружает файл data.xml и запускает колбек, которому передает 2 параметра - nodelist и номер статуса.
Я хочу, чтобы колбек вызывал Streets.parseXML и передал ему параметры. Но это у меня пока не получается.
Если я делаю так:
load: function() {
GDownloadUrl("data.xml", this.parseXML);
},
parseXML: function(data, responseCode) {
alert(this.temp); // undefined, "потеряли" this
alert(arguments.length); // все хорошо - 2 аргумента.
}
если так:
load: function() {
GDownloadUrl("data.xml", this.parseXML.call(this));
},
parseXML: function(data, responseCode) {
alert(this.temp); // результат - ok
alert(arguments.length); // результат - 0, параметры не передались
}
если так:
// Так вообще не работает.
load: function() {
GDownloadUrl("data.xml", this.parseXML.call(this, data, responseCode));
},
parseXML: function(data, responseCode) {
alert(this.temp);
alert(arguments.length);
}
Если так:
load: function() {
GDownloadUrl("data.xml", this.parseXML.call(this, arguments[0], arguments[1]));
},
parseXML: function(data, responseCode) {
alert(this.temp); // Результат - ок
alert(arguments.length); // 2 аргумента
alert(responseCode); // но оба undefined
}
если так:
load: function() {
GDownloadUrl("data.xml", function(data, responseCode) {
// this здесь не указывает на Streets, т.е.
// вызвать отсюда this.parseXML не получается.
// Может есть способ?
});
},
parseXML: function(data, responseCode) {
//...
}
Подскажите, пожалуйста, как же все-таки вызвать parseXML, чтобы this ссылался на Streets и аргументы были бы "на месте".