3

我有一个功能 winch 执行某些操作,并且效果很好。现在我想添加一个引导模式并在模式关闭时执行相同的代码。但我的问题是我必须检查用户状态。有没有办法如何执行此代码而不是复制所有内容两次?

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

创建函数。

它比两行代码和一个剪切和粘贴多多少工作?

抵制重构往往会导致长期的痛苦。

像这样的东西不工作吗?从你所拥有的东西到那里要付出多少努力?

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

您的代码中的注释显示了两种不同的事情想要发生

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 回答