Я пишу приложение в JavaScript и не могу понять это, как получить доступ к переменным, объявил в моей функции, в этом синтаксическом анализе jQuery. Внутри я могу получить доступ к глобальным переменным, но я действительно не хочу создавать глобальный Вар для этих значений.
В основном я хочу извлечь имена файлов из xml документа в simulationFiles
переменная. Я проверяю, равен ли атрибут узла с simName
и извлеките две строки в xml элементах, та первая часть думают, что она работает.
Как я могу извлечь те xml элементы и добавить их к локальным переменным?
function CsvReader(simName) {
this.initFileName = "somepath";
this.eventsFileName = "somepath";
$(simulationFiles).find('simulation').each(function() {
if ($(this).attr("name") == simName) {
initFileName += $(this).find("init").text();
eventsFileName += $(this).find("events").text();
}
});
}
this
в CsvReader
функция не то же самое this
в each ()
обратный вызов (где вместо этого это текущий элемент в итерации). Чтобы получить доступ к области внешней функции в обратном вызове, нам нужно иметь возможность ссылаться на нее по другому имени, которое вы можете определить во внешней области:
function CsvReader(simName) {
this.initFileName = "somepath";
this.eventsFileName = "somepath";
var self = this; // reference to this in current scope
$(simulationFiles).find('simulation').each(function() {
if ($(this).attr("name") == simName) {
// access the variables using self instead of this
self.initFileName += $(this).find("init").text();
self.eventsFileName += $(this).find("events").text();
}
});
}
Я сделал рабочую демонстрацию (я изменил ее для использования классов, чтобы она работала с HTML).
function CsvReader(simName) {
this.initFileName = "somepath";
this.eventsFileName = "somepath";
var context = this;
$(simulationFiles).find('simulation').each(function() {
if ($(this).attr("name") == simName) {
context.initFileName += $(this).find("init").text();
context.eventsFileName += $(this).find("events").text();
}
});
}