как получить анонимную функцию, чтобы сохранить объем, который был изначально при вызове в обработчике событий - PullRequest
0 голосов
/ 02 ноября 2009

У меня есть установка, в которой я получаю некоторую информацию при вызове 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() :
                                    '';

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

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

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

1 Ответ

0 голосов
/ 02 ноября 2009

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

function foo(){
    var myFoo = 1;
    return function (){return function() { myFoo += 1; return myFoo }}()
} //                                                                  ^^ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...