【问题标题】:Callback function to jQuery pluginjQuery插件的回调函数
【发布时间】:2012-01-27 17:59:33
【问题描述】:

我怀疑 Javascript 中的“调用”功能。我有这个 jQuery 插件:

(function($) {
    var methods = {
        method1 : function( settings, callback ) { 
            // do stuff
                if($.isFunction(callback)){
                    callback.call(this, $(list));
                }
        },

        method2 : function( settings, callback ) { 
            // do stuff
                if($.isFunction(callback)){
                    callback.call(this, $(list));
                }
        },

        method3 : function( settings, callback ) { 
            // do stuff
                if($.isFunction(callback)){
                    callback.call(this, $(list));
                }
        },


};

$.fn.jPlugin = function( method ) {
    if ( methods[method] ) {
        return methods[method].apply( this, Array.prototype.slice.call(arguments, 1));
    } 

    else if ( typeof method === 'object') {
        $.error( 'Expected two (2) parameters: parameter 1 must be the method name to call. Parameter 2 must be an object containing the settings for this method.' );
    } 

    else {
        $.error( 'Method ' +  method + ' does not exist' );
    }   
}; 

而且我对 jQuery 插件文档中的这一行有点困惑:

return methods[method].apply( this, Array.prototype.slice.call(arguments, 1));

插件按预期工作,没有通过回调。但是如果我这样调用插件,我应该怎么做才能将回调传递给正确的方法呢?

$('#my-div').jPlugin('method1', settings);

回调函数应该是设置对象的一部分,还是我可以调整插件来接受这个?

$('#my-div').jPlugin('method1', settings, callback);

谢谢你们!

【问题讨论】:

  • $('#my-div').jPlugin('method1', settings, callback); 将适用于您当前的插件代码。你到底有什么问题?
  • 我只是不完全理解“呼叫”部分。我认为 (arguments, 1) 指的是 $('#my-div').jPlugin('method1', settings);,... 的第二个参数,所以是“设置”。我不知道是否应该在其他地方添加回调。
  • 我猜,“参数”本身是指调用的所有参数,所以设置和回调,就这样?
  • 抱歉,对我来说同时信息太多,... slice 表示从第二个开始的每个元素...
  • arguments 不是数组,它只是类数组slice 函数返回从您提供的索引开始的子数组。所以Array.prototype.slice.call(arguments, 1)slice 应用于arguments,因此将其视为一个数组。如果arguments 是一个数组,它将与arguments.slice(1) 相同,这意味着从数组中的第二个元素开始获取所有元素。它基本上是删除方法名称并将所有剩余的参数传递给您的方法。

标签: jquery jquery-plugins callback


【解决方案1】:

在@Felix Kling cmets 中回答

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-03
    • 2018-04-07
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多