Как получить анонимную функцию, чтобы сохранить ее область видимости при вызове в обработчике событий

109
5

У меня есть настройка, где я получаю некоторую информацию, в вызове ajax, затем я сразу использую часть этой информации для другого вызова, а затем заполняю некоторые поля.


Проблема в том, что я не уверен, как создать анонимную функцию, чтобы она могла вызывать this.plantName.


В настоящее время значение this.plantName равно undefined.


Я знаю, что отсутствуют близкие скобки, но я не собираюсь пытаться их выровнять, так как это приведет к путанице, поэтому проигнорируйте отсутствующие замыкающие фигурные скобки.


TabLinks.prototype.plantName = '';

TabLinks.prototype.init = function() {
this.updateTab('PlantDropDown', 'retrievePlants', 'retrieveAllPlants', 'tab3', function() { return this.plantName; });
};

function TabLinks() {
this.updateTab = function(entityname, wsbyid, webservicename, parentContainer, defaultValue) {
$("#" + parentContainer + "link").bind('click', function() {
$.ajax({
type: "POST",
...
success: function(result) {
myData = JSON.parse(result.d);
$.ajax({
type: "POST",
...
success: function(result2) {
...
myelem.value = JHEUtilities.testIsValidObject(defaultValue) ?
defaultValue() :
'';


Update:
Вот решение, которое сработало, я не понял двух возвратов функций:


this.updateTab('PlantDropDown', 'retrievePlants', 'retrieveAllPlants', 'tab3',
function() {
var app = this;
return function() {
return function() {
return app.plantName;
}
}()
}
);

Поэтому я должен был назвать это так:
defaultValue()();

спросил(а) 2021-01-19T11:38:17+03:00 6 месяцев, 2 недели назад
1
Решение
110

То, как я программирую свой путь, состоит в том, чтобы убедиться, что закрытие возвращается из функции в области захваченных переменных. Что-то вроде этого:

function foo(){
var myFoo = 1;
return function (){return function() { myFoo += 1; return myFoo }}()
} // ^^

ответил(а) 2021-01-19T11:38:17+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема