抽象jquery对话框调用以减少膨胀

时间:2011-08-29 15:11:19

标签: jquery

我正在寻找创建一个抽象的jquery对话框函数,我将参数传递给我以减少我的整体js膨胀。我的javascript目前有很多例子:

    $(".claim_issue_lb").click(function (e) {

    $(function () {

        $("#dialog-claim").dialog({
            resizable: false,
            height: 240,
            modal: true,
            buttons: {
                "Claim Issue": function () {
                    ProcessDealerAction("claim"); //function to be called upon success
                    $(this).dialog("close");
                },
                Cancel: function () {
                    $(this).dialog("close");
                }
            }
        });

    });
});

为解决这个问题,我创建了以下内容:

function LoadDialog(target, height, confirm_button, function_call) {

$(target).dialog({
    resizable: false,
    height: height,
    modal: true,
    buttons: {
        confirm_button: function () {
            function_call;
            $(this).dialog("close");
        },
        Cancel: function () {
            $(this).dialog("close");
        }
    }
});

}

希望能够将对话调用减少到以下示例:

$(".claim_issue_lb").click(function (e) {

    LoadDialog("#dialog-claim", 240, "Claim Issue", ProcessDealerAction("claim"));

});

它似乎运行良好,除了弹出确认对话框然后自行运行而没有任何人单击“是这样做”或“取消”,然后对话框自动关闭。

我不确定如何解决这个问题,或者我的整个方法是否有缺陷。

1 个答案:

答案 0 :(得分:1)

LoadDialog("#dialog-claim", 240, "Claim Issue", ProcessDealerAction("claim"));

将立即执行ProcessDealerAction。您需要在此处传递function,而不是其结果。

function LoadDialog(target, height, confirm_button, function_call, function_args) {
...
LoadDialog("#dialog-claim", 240, "Claim Issue", ProcessDealerAction, ["claim"]);

LoadDialog("#dialog-claim", 240, "Claim Issue", (new function(){ProcessDealerAction("claim"));}))

会让您更接近您需要的位置。您还需要正确调用回调。

 confirm_button: function () {
            function_call();
            $(this).dialog("close");
        },

或者如果您决定单独传递args而不需要匿名函数:

 confirm_button: function () {
            function_call.apply(this, [function_args]);
            $(this).dialog("close");
        },