首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重构Javascript

重构Javascript
EN

Stack Overflow用户
提问于 2010-01-04 08:42:14
回答 4查看 777关注 0票数 0

我在我的网站的管理区域有很多代码,也就是说,基本上只是使用AJAX发布的CRUD操作。

我想知道你是否有任何关于将这些类型的函数重构为泛型函数或类等的技巧。

下面是一些示例代码,其中许多代码在其他函数中重复使用,只是使用了不同的ajax参数:

代码语言:javascript
复制
function BindAddMenuHeaderOption() {
    $("#AddMenuHeaderOption").click(function (e) {
        e.preventDefault();

        var headerOptionId = jQuery.trim($("#HeaderOptions").val());
        var menuHeaderId = jQuery.trim($("#MenuHeaderId").val());

        $.ajax(
        {
            type: "POST",
            url: "/Menu/AddMenuHeaderOption",
            data: "menuHeaderId=" + menuHeaderId + "&headerOptionId=" + headerOptionId,
            dataType: "html",
            success: function (result) {
                var domElement = $(result);
                $("#ModalContent").empty();
                $("#ModalContent").append(domElement);
                BindAllBehaviours();
            }
        });
    });

}

function BindAddMenuItem() {
    $(".AddMenuItem").click(function (e) {
        e.preventDefault();

        //get header id from link by removing addmenuitem from this.id
        var currentId = $(this).attr("id").replace("AddMenuItem", "");

        //get itemnumber, itemname, itemdetails from textboxes with same header id
        var restaurantId = jQuery.trim($("#RestaurantId").val());
        var itemNumber = jQuery.trim($("#ItemNumber" + currentId).val());
        var itemName = jQuery.trim($("#ItemName" + currentId).val());
        var itemDetails = jQuery.trim($("#ItemDetails" + currentId).val());

        $.ajax(
        {
            type: "POST",
            url: "/Menu/AddMenuItem",
            data: "reastaurantId=" + restaurantId + "&menuHeaderId=" + currentId + "&itemNumber=" + itemNumber + "&itemName=" + itemName + "&itemDetails=" + itemDetails,
            dataType: "html",
            success: function (result) {
                var domElement = $(result);
                $("#MenuContainer").replaceWith(domElement);
                var newNum = parseInt(itemNumber) + 1;
                $("#ItemNumber" + currentId).val(newNum);
                BindAllBehaviours();
            }
        });
    });

}

function BindUpdateMenuItem() {
    $(".UpdateMenuItem").click(function (e) {
        e.preventDefault();


        var restaurantId = jQuery.trim($("#RestaurantId").val());
        var itemNumber = jQuery.trim($("#UpdateItemNumber").val());
        var itemName = jQuery.trim($("#UpdateItemName").val());
        var itemDetails = jQuery.trim($("#UpdateItemDetails").val());

        var vars = GetHtmlParameters($(this));

        $.ajax(
        {
            type: "POST",
            url: "/Menu/UpdateMenuItem",
            data: "reastaurantId=" + restaurantId + "&menuItemId=" + vars["menuItemId"] + "&itemNumber=" + itemNumber + "&itemName=" + itemName + "&itemDetails=" + itemDetails,
            dataType: "html",
            success: function (result) {
                var domElement = $(result);
                $("#MenuContainer").replaceWith(domElement);
                BindAllBehaviours();
            }
        });
    });

}
EN

回答 4

Stack Overflow用户

发布于 2010-01-04 09:02:51

次要nit:构造URL参数通常应该通过一个方法来完成,而不是使用连接,因为这样您就可以确保正确地对值进行URL转义。例如:如果'restaurantId‘包含一个与号(&)字符,那么您的data=变量将被损坏。因此,我建议将其重构为一个字典({restaurantId: restaurantId,...})或将其传递给一个方法(类似于: buildQueryArguments(name1,value1,name2,value2,...))。根据您的实现,该方法可以实现为直接从表单域中提取值。

但是,您最好的选择可能是使用像jQuery表单插件(http://jquery.malsup.com/form/)这样的插件,因为这将为用户提供更好的用户体验,以防他们没有完全的JS支持。

否则,您可以做一些廉价的重构(例如,使用填充sin默认参数的东西封装.ajax()调用),但从长远来看,这不会对您有太大影响。

票数 2
EN

Stack Overflow用户

发布于 2010-01-04 08:57:04

由于所有这些代码都涉及使用AJAX提交一组输入元素,因此可以尝试将它们放入表单元素中(如果还没有的话),然后使用jQuery Form Plugin将它们升级到AJAX。如果由于某种原因禁用了Javascript,这也会为您提供后备行为。

票数 1
EN

Stack Overflow用户

发布于 2010-01-04 09:01:31

您可以使用更高级别的jQuery.post( url, [data], [callback], [type] ).将.ajax回调分解为更小的函数

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1996953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档