2014-02-16 5 views
0

Можно ли передать метод с помощью jquery?Как передать метод jquery

Мой код выглядит следующим образом:

var BodySwitcher = { 

    initBodySwitcher : function(){ 
     $(document).on("click", ".bodySwitcher", function() { 
      var action = $(this).attr("id"); 
      this.ajaxCall(action, null, this.showBody()); 
     }); 
    }, 

    ajaxCall : function(action, data, callback){ 
     $.ajax({ 
      url: action, 
      type: "POST", 
      data: data, 
      dataType: "json", 
      error: function(){ 
       alert('Error'); 
      }, 
      success: function(data){   
       callback(data); 
      } 
     }); 
    }, 

    showBody : function(data){ 
     $("#body_container").empty(); 
     $("#body_container").html(data); 
    } 


}; 

Что я хочу сделать, это повторно использовать свою функцию Ajax, передавая все параметры на нем, включая метод обратного вызова/функции ..

БЛАГОДАРЮ вы.

ответ

1

Единственная проблема, которую я вижу, заключается в использовании this внутри обработчика события click для обращения к объекту BodySwitcher.

Попробуйте

var BodySwitcher = { 
    initBodySwitcher: function() { 
     var self = this; 
     $(document).on("click", ".bodySwitcher", function() { 
      var action = $(this).attr("id"); 
      //this here refers to the `bodySwitcher` element not the BodySwitcher object 
      self.ajaxCall(action, null, $.proxy(self.showBody, this)); 
     }); 
    }, 

    ajaxCall: function (action, data, callback) { 
     $.ajax({ 
      url: action, 
      type: "POST", 
      data: data, 
      dataType: "json", 
      error: function() { 
       alert('Error'); 
      }, 
      success: function (data) { 
       callback(data); 
      } 
     }); 
    }, 

    showBody: function (data) { 
     $("#body_container").empty(); 
     $("#body_container").html(data); 
    } 
}; 
Смежные вопросы