编写插件jQuery文档

时间:2013-04-03 19:27:28

标签: jquery plugins

我正在玩弄插件,所以我转向jQuery文档,其中讨论的是没有弄乱$ .fn对象以及单个插件如何在$ .fn命名空间中声明更多...

(function( $ ){

  var methods = {
    init : function( options ) { 
      // THIS 
   },
    show : function( ) {
      // IS
    },
    hide : function( ) { 
      // GOOD
    },
    update : function( content ) { 
      // !!! 
    }
  };

  $.fn.tooltip = function( method ) {

    // Method calling logic
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
  return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }    

  };

})( jQuery );

// calls the init method
$('div').tooltip(); 

// calls the init method
$('div').tooltip({
  foo : 'bar'
});

我了解所有事情直到:

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

一部分。

我改变了这一点:

$.fn.tooltip = function(method)
{
    if(myFunc[method])
    {
        return myFunc[method].apply();
    }
}

它运作得很好......有人可以向我解释那里到底发生了什么,为什么我的工作似乎很好?

编辑:顺便说一下,我知道我没有完全继续if / else结构,因为我完全专注于我提到的那一行,而不是if结构的剩余部分。

1 个答案:

答案 0 :(得分:1)

你这样做的方式很好,但是,它不允许你将任何参数传递给你的方法。

例如,如果您的插件使用option方法允许您更改工具提示文本选项,则可以这样调用:

$(element).tooltip("option","text","foobar!!");

如果您删除所有其他代码并使用您的方式,则option方法将不会收到"text""foobar!!!"参数。