开发者

Javascript Delegate issue

So far I haven't been able to grok any Delegate function tutorials out there for Javascript. Even less so the ones with pa开发者_如何学Crameters.

Hopefully my current problem will provide a good example. (XXXX() is a function I am passing to Fee())

The way I have it now, my "delegate", (XXXX()) executes as soon as Fee() is called, not when I want it to be called (somewhere inside of Fee())

line of code that calls function:

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

Function:

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;
        }
    });
}

Delegate function:

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);
}

Comments?


You want:

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

It's usually not called a "delegate" in Javascript. I believe that's a term mostly used in the Microsoft part of the world. We just call it a lambda or anonymous function.

You also have a bug in the main (Fee) function. Change this line:

func(); //delegate is called here


If your function is called XXX, then if you use this syntax: XXX(), you are invoking your function. To pass it in as a delegate, you simply pass in XXX:

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

The Fee method will be responsible for invoking it and determining which parameters are passed into the method.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜