3

何かを実行する機能があり、うまく機能します。ここで、ブートストラップ モーダルを追加し、モーダルが閉じたときに同じコードを実行したいと考えています。しかし、私の問題は、ユーザーのステータスを確認する必要があることです。このコードを実行し、すべてを 2 回コピーしない方法はありますか?

if(USERTYPE == 0) {
  $("#fastRegisterModal").modal('show');
  $("#fastRegisterModal").on('hidden', function() {
    //Code for registration and upload code
  }
} else {
  //upload code
}

これを複数のjquery関数(主に.live関数)に含めたいのですが、「アップロードコード」を通常のjs関数に移動したくありません(.jsファイルをそのまま書き込み、変更したくありませんファイルの 70%)

これは、この方法または他の方法で可能ですか?

編集済み

ここにいくつかのコードがあります:

$('.someAction').live('click', function(event) {
// Init section
var data1 = $(".getData1").val();
var data2 = $(".getData2").val();

// I want to add this modal check before exsisting code

if(USERTYPE == 0) {
    $("#fastRegisterModal").modal('show').on('hidden', function() {
        var email = $(".getModalEmail").val();
        var pass = $(".getModalPass").val();

        $.ajax({
            url: "actions/fastRegister",
            type: 'POST',
            data: {email: email, pass: pass}, 
            success: function(data) {
                if (data.success == 1) {
                    // continue with existing block of code
                }
            }
        });
    });
}

// Existing block of code

$.ajax({
    url: "actions/someAction",
    type: 'POST',
    data: {data1: data1, data2: data2}, 
    success: function(data) {
        if (data != '') {
            // show success
        }
    }
});
});

これで私の状況がよく説明されることを願っています:)

4

2 に答える 2

2

関数を作成します。

2 行のコードとカット アンド ペーストよりどれだけ手間がかかるでしょうか?

リファクタリングに抵抗すると、長期的な苦痛につながる傾向があります。

このようなものは機能しませんか?あなたが持っているものからそこにたどり着くのにどれだけの努力が必要ですか?

var doSomeAction = function () {
    $.ajax({
          url: "actions/someAction",
          type: 'POST',
          data: {data1: data1, data2: data2}, 
          success: function(data) {
              if (data != '') {
                // show success
              }
          }
     });

 };

 if(USERTYPE == 0) {
    $("#fastRegisterModal").modal('show').on('hidden', function() {
       var email = $(".getModalEmail").val();
       var pass = $(".getModalPass").val();

       $.ajax({
          url: "actions/fastRegister",
          type: 'POST',
          data: {email: email, pass: pass}, 
         success: function(data) {
            if (data.success == 1) {
                doSomeAction();
            }
          }
      });
    });
} else {
   doSomeAction();
}
于 2013-03-08T12:25:26.143 に答える
2

したがって、「通常の」js 関数を書きたくないという正当な理由があると仮定しましょう。

jQueryを拡張できます。

$.fn.extend({
    doSomething: function(){
        // do something with $(this)
    }
});

and then

if(USERTYPE == 0) {
  $("#fastRegisterModal").modal('show').on('hidden', function() {
    $(this).doSomething();
  }
} else {
  $("#fastRegisterModal").doSomething();
}    

または、カスタム バインドを作成してトリガーすることもできます。

$("#fastRegisterModal").on('doSomething', function(){
     // do something with $(this)
});

if(USERTYPE == 0) {
  $("#fastRegisterModal").modal('show').on('hidden', function() {
    $(this).trigger('doSomething');
  }
} else {
  $("#fastRegisterModal").trigger('doSomething');
}

コード内のコメントは、2 つの異なる処理が必要であることを示しています

if(USERTYPE == 0) {
  $("#fastRegisterModal").modal('show');
  $("#fastRegisterModal").on('hidden', function() {
    //Code for registration and upload code
    $(this).trigger('doRegistration').trigger('doUpload');
    // or $(this).doRegistration().doUpload();
  }
} else {
    //upload code
    $(this).trigger('doUpload');
    // or $(this).doUpload();
}
于 2013-03-08T12:28:23.290 に答える