Javascript Делегат проблема - PullRequest
1 голос
/ 27 марта 2011

До сих пор я не смог получить какие-либо руководства по функциям Делегата для Javascript.Тем более с параметрами.

Надеюсь, моя текущая проблема послужит хорошим примером.(XXXX () - это функция, которую я передаю в Fee ())

В моем нынешнем виде мой «делегат» (XXXX ()) выполняется сразу после вызова Fee (), а не когдаЯ хочу, чтобы он вызывался (где-то внутри Fee ())

строка кода, которая вызывает функцию:

Fee(prod, item, "usage", i, y, XXXX(prod, y));

Функция:

function Fee(prod, item, name, i, y, func) {

    var open = false;
    var prefix = "#" + prod + name;

    $(prefix + y).click(function () {
        var feeBoxName = prefix + "FeeBox" + y;

        if (open == false) {

            FeeOpen(prefix, y);

            func; //delegate is called here

            AddFeeButton(feeBoxName, "addFeeBtn2");
            open = true;
        } else {

            FeeClosed(prefix, y);
            open = false;
        }
    });
}

Функция делегата:

function XXXX(prod, y) {
    var deducedFeeBoxName = "#" + prod + "usageFeeBox" + y;
    alert(deducedFeeBoxName); //at present, this is called immediately when Fee is executed 

    UsageFeeBoxHeader(deducedFeeBoxName);
    UsageFeeBoxData(deducedFeeBoxName, prod, y);
}

Комментарии?

Ответы [ 2 ]

4 голосов
/ 27 марта 2011

Вы хотите:

Fee(prod, item, "usage", i, y, function() { XXXX(prod, y); });

Обычно это не называется «делегатом» в Javascript.Я полагаю, что этот термин в основном используется в части мира Microsoft.Мы просто называем это лямбда-функцией или анонимной функцией.

У вас также есть ошибка в основной (Fee) функции.Измените эту строку:

func(); //delegate is called here
2 голосов
/ 27 марта 2011

Если ваша функция называется XXX, то если вы используете этот синтаксис: XXX(), вы вызываете свою функцию. Чтобы передать его в качестве делегата, вы просто передаете XXX:

Fee(prod, item, "usage", i, y, XXX);

Метод Fee будет отвечать за его вызов и определение того, какие параметры передаются в метод.

...