1

私は次のコードを持っています:

var btns1 = {
    'Submit': function (win) {
        submitHandler(oLink.$link, $('#main-form'), false);
    },
    'Submit & Close': function (win) {
        submitHandler(oLink.$link, $('#main-form'), true);
    },
    'Close': function (win) {
        modal.closeModal()
    }
}
var btns2 = {
    'Submit & Close': function (win) {
        submitHandler(oLink.$link, $('#main-form'), true);
    },
    'Close': function (win) {
        modal.closeModal()
    }
}

if (oLink.title.substr(0, 4) == "Crea") {
    if (content.match(/data-RowKey="(.{3}).*/)) {
        oLink.title += " " + content.match(/data-RowKey="(.{3}).*/)[1]
    }
    var btns = btns1;
}
if (oLink.title.substr(0, 4) == "Edit") {
    var btns = btns1;
}
if (oLink.title.substr(0, 4) == "Dele") {
    var btns = btns2;
}

コードをリファクタリングする方法はありますか?私が考えていたのは、これを「adminModalBtns」という関数に入れ、oLinkとコンテンツをパラメーターとして受け取り、btnsを返すようにすることでした。if-elseまたはcaseステートメントを使用してこれを行うのが最も明確でしょうか?

4

3 に答える 3

1
function getButtons(oLink, content) {

    var btns1 = {
        'Submit': function(win) {
            submitHandler(oLink.$link, $('#main-form'), false);
        }
    }
    var btns2 = {
        'Submit & Close': function(win) {
            submitHandler(oLink.$link, $('#main-form'), true);
        },
        'Close': function(win) {
            modal.closeModal()
        }
    }
    switch (oLink.title.substr(0, 4)) {
    case "Crea":
        if (content.match(/data-RowKey="(.{3}).*/)) {
            oLink.title += " " + content.match(/data-RowKey="(.{3}).*/)[1]
        }
    case "Edit":
        return $.extend(btns1, btns2);
    case "Dele":
        return btns2;
    }
}

var btns = getButtons(oLink, content);
于 2012-08-19T11:14:59.163 に答える
1

または、 3値演算子を使用することもできます

var sub = oLink.title.substr(0, 4)
   ,bttns =  sub === "Crea" ? btns1 
           : sub === "Edit" ? btns1 
           : btns2;
oLink.title += /data-RowKey="(.{3}).*/.test(content) 
               ? ' ' + content.match(/data-RowKey="(.{3}).*/)[1] 
               : ''; 
于 2012-08-19T11:36:30.530 に答える
0

ハッシュマップを使用してコードをリファクタリングし、正規表現を格納conditionMapする変数を作成することもできます。re/data-RowKey="(.{3}).*/

var getButtons = function (oLink, content) {
        var re = new RegExp(/data-RowKey="(.{3}).*/),
            btns1 = {
                'Submit': function (win) {
                    submitHandler(oLink.$link, $('#main-form'), false);
                }
            },
            btns2 = {
                'Submit & Close': function (win) {
                    submitHandler(oLink.$link, $('#main-form'), true);
                },
                'Close': function (win) {
                    modal.closeModal();
                }
            },
            conditionMap = {
                'Crea': (content.match(re)) && (oLink.title += ' ' + content.match(re)[1]),
                'Edit': $.extend(btns1, btns2),
                'Dele': btns2
            };

        return conditionMap[oLink.title.substr(0, 4)];
    },
    btns = getButtons(oLink, content);
于 2016-12-10T22:32:26.507 に答える