如何将回调方法发送到另一个回调方法

How to send a callback method to another callback method

本文关键字:回调 方法 另一个      更新时间:2023-09-26

我正在开发一个自定义的jQuery插件,我给出了以下选项来相应地独立修改插件:

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"的错误有没有更好的方法来调用afterSucess回调方法中的this._removeContainer()?或者我错过了什么?

尝试将上下文设置为removeContainer,因为现在removeContainer中的this引用全局window,但在window中没有response_container,就像这个一样

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

更新

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