2012-02-23 14 views
0

私は自分のコードをできるだけDRYにしておきたいと考えています。 次のコードでは、以下のコードで何度も再利用する必要があります。jQueryのリファクタリングされた機能

.on("click", "a", function(e) {}) 

私はちょうど、addToBooking機能を複製し、それを別の名前を付け、クリックハンドラのわずかな変更を行うが、それは無駄な繰り返し感じている可能性があります。

おそらくコードブロックをaddToBooking関数に渡すことはできますか? また、私が気づいていないもう一つのクールで効率的な方法があります。

完全なコードブロック機能で

var addToBooking = function(that, event) { 
    var left, top; 

    event.stopPropagation(); 

    //Turn off all calendar tracking 
    $(".track").off(); 

    //Get proper sticky positioning (Checks to make sure it wont display off screen) 
    left = getPosition(".add_to_booking", "left"); 
    top = getPosition(".add_to_booking", "top"); 

    //Position sticky, display and listen for click event to see what to do next 
    $(".add_to_booking").css({top: top, left: left}) 
         .fadeIn('fast') 
         .on("click", function(e) { e.stopPropagation(); }) 
         .on("click", "a", function(e) { 
         if($(this).text() === "YES") { 
          //Close dialog 
          closeTT(); 

          //Open new add to booking box 
          addBooking(that, event); 

         } else { 
          closeTT(); 
         } 
         }); 
} 

答えて

2

パスとパラメータを渡すには、それを

var addToBooking = function(that, event, custFnc) { 
    ... 
    ... 
    .on("click", "a", custFnc); 
} 

Fiddle

を割り当て、あなたはcall()

jQuery(function(){ 

    function hey(evt, test){ 
     var text = jQuery(this).text(); 
     alert(text + ":" + test); 
    } 


    function addClick(custFnc){ 
     var test=99; 
     jQuery("#foo").on("click", 
      function(e){ 
       custFnc.call(this, e,test); 
      } 
     ); 
    } 

    addClick(hey); 
}); 
を使用する必要があります

Fiddle

+0

あなたの例では、どのように関数から変数を渡すのですか? http://jsfiddle.net/SqZm4/1/ – EasyCo

+0

パラメータを渡すためにcall()を使用する方法を示すために編集されています。 – epascarello

関連する問題