2015-02-07 5 views
1

Я работаю над обычаем JQuery плагин, я дал следующие варианты indepandently изменить плагин соответственно:Как отправить метод обратного вызова к другому методу обратного вызова

onSuccess: false,    // callback 
afterSuccess: false,    // callback 
beforeRequest: 'searching ...', 

Это, как я обрабатывать этот обратный вызов в мой плагин,

/* --------------- Click Event on Dynamic Elements ------------------ */ 
this._afterSuccess(this.parent, this.$el, this.extraElement, this._removeContainer); 

Как вы можете видеть в приведенном выше коде this._removeContainer это метод, который я хочу, чтобы отправить afterSuccess обратного вызова.

_afterSuccess: function(parent, element, extraElement, removeContainer) { 

     var that = this; 

     if(typeof this.options.afterSuccess == "function") { 
      // Trigger callback if found 
      this.options.afterSuccess.call(this, parent, element, extraElement, removeContainer); 
     } 
     else { 
      parent.on('click', 'li a', function(e) { 
       e.preventDefault(); 

       var id = $(this).data('key'); 
       var text = $(this).text(); 

       that.$el.val(text); 
       that._removeContainer(); 
       that.extraElement.val(id); 
      }); 
     } 
    }, 
    _removeContainer: function() { 
     this.response_container.html(''); 
     this.extraElement.val(''); 
    }, 

Это, как я реализую плагин:

$('#some_element').MyPlugin({ 
    afterSuccess: function(parent, element, extraElement, removeContainer) { 
      parent.on('click', 'li a', function(e) { 
       e.preventDefault(); 

       var id = $(this).data('key'); 
       var text = $(this).text(); 

       element.val(text); 
       // Not working Generating Error 
       removeContainer(); 

       extraElement.val(id); 
      }); 
     } 
}); 

removeContainer() генерирующую ошибку, «response_container» неопределенной Есть ли лучший способ вызвать метод this._removeContainer() в afterSucess обратного вызова? ИЛИ я что-то пропустил?

ответ

2

Попробуйте установить контекст для removeContainer, потому что теперь в removeContainerthis относятся к глобальному window, но в window нет response_container, как это

this.options.afterSuccess.call(this, parent, element, extraElement, $.proxy(removeContainer, this)); 

Update

this.options.afterSuccess.call(this, parent, element, extraElement, removeContainer.bind(this)); 
Смежные вопросы