什么是使JQuery插件可扩展的方法?

时间:2013-03-13 15:07:07

标签: javascript jquery jquery-plugins plugins syntactic-sugar

我尝试通过以下方式将一些常见的应用程序特定操作移动到 jQuery插件

$.fn.extpoint = function() {...}

但我不想声明几个扩展点:

$.fn.extpoint1 = function() {...}
$.fn.extpoint2 = function() {...}
...

相反,我想使用语法糖,如:

$("#id").extpoint.func1().extpoint.func2()

定义:

$.fn.extpoint = {}
$.fn.extpoint.func1 = function() {
    this.val();
    this.data("ip");
    ...
    return this;
}

并致电:

$("#id").extpoint.func1(...)
this进行评估时,

$.fn.extpoint指向func1(包含func2func1,...元素的字典),而不是原始jQuery对象。< / p>

是否可以使jQuery插件可扩展?

PS 即可。可以将函数名称作为第一个参数传递给$.fn.extpoint,并实现$.fn.extpoint('extend', func)调用以扩展(保存到名称和实现之间的内部字典关联)扩展点。在这种情况下,用例看起来像:

$("#id").extpoint('func1', ...).extpoint('func2', ...)

但我想找到更多语法 ...

的方法

2 个答案:

答案 0 :(得分:2)

我要求的任务很难实现。

Official docs说:

在任何情况下,单个插件都不应在jQuery.fn对象中声明多个命名空间:

(function( $ ){
  $.fn.tooltip = function( options ) { 
    // THIS
  };
  $.fn.tooltipShow = function( ) {
   // IS
  };
  $.fn.tooltipHide = function( ) { 
    // BAD
  };
})( jQuery );

这是不鼓励的,因为它使$.fn命名空间变得混乱。要解决这个问题,你应该在对象文字中收集所有插件的方法,并通过将方法的字符串名称传递给插件来调用它们。

另一种方法是保持与http://code.google.com/p/jquery-plugin-dev/source/browse/trunk/jquery.plugin.js

this的链接

所以你的电话看起来像是:

$.fn.addPlugin('test2', {
    __construct : function(alertText) { alert(alertText); },
    alertAttr   : function(attr) { alert($(this).attr(attr)); return this; },
    alertText   : function() { alert($(this).text()); return this; }
});

$('#test2').bind('click', function() {
     var btn = $(this);

     btn.test2('constructing...').alertAttr('id').alertText().jQuery.text('clicked!');

     setTimeout(function() {
             btn.text('test2');
     }, 1000);
});

一些相关链接:

旧式插件扩展:

答案 1 :(得分:1)

Here概述了创建插件。我相信你所问的是被称为“链接”。这使得jQuery如此易于使用,并且您希望确保正确实现它是很好的。

在开发关于链接的插件时要记住的关键是始终return this;来自您的方法。这就是让你保持链条发展的原因。