使用jquery ui-like参数接受创建jquery插件

时间:2011-01-17 15:20:52

标签: jquery jquery-ui jquery-plugins

我正在尝试创建一个与jquery ui plugin for dialogs具有相似用法的插件。我之后的用法看起来像这样

首先,要为我的插件设置选项(使用默认操作),您可以传递这样的参数。

$('#myId').dialog({
    value1 : 'someValue',
    value2 : 'anotherValue',
    //...
});

此外,我希望能够使用“关键词”连接特定事件。例如,在jquery.UI中,您可以调用它来关闭对话框

$('#myId').dialog('close');

我的问题是我如何设置我的插件,以便它在设置中传递它做一件事,或者根据传入的关键字做其他事情?我试着查看一些jquery ui代码,但我不确定我是在理解它在做什么,甚至不知道从哪里开始只是提取这个功能。

2 个答案:

答案 0 :(得分:3)

请查看jQuery Plugins/Authoring,特别是Plugin Methods

示例:

(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 );

,然后...

$('div').tooltip(); // calls the init method
$('div').tooltip({  // calls the init method
  foo : 'bar'
});
$('div').tooltip('hide'); // calls the hide method
$('div').tooltip('update', 'This is the new tooltip content!'); // calls the update method

答案 1 :(得分:0)

检查您传递的对象类型:

if (typeof arguments[0] === 'string') {
 // I was given a string, my convention tells me this is a command
} else if (typeof arguments[0] === 'object') {
  // my convention tells me that this is an instantiation object
}

您可能还想检查对象属性,或使用$.isArray()