是否有可能在JQuery插件中编写第二个非静态,选择,特权函数?

时间:2009-07-01 22:46:54

标签: javascript jquery jquery-plugins privileged-functions

我读过的jQuery教程中几乎所有的例子,通常都会使用一个主要的公共函数来选择插件。当我说'选择'插件时,我的意思是一个不仅仅是一个扩展到jQuery的静态函数。

例如:

(function($) {

jQuery.fn.actionList = function(options) {
    var opts = $.extend({}, $.fn.actionList.defaults, options);
    return this.each(function(){
       alert(this);
    });

};

$.fn.actionList.defaults = {
    listHtml: '<div>Set the list html</div>'
};

})(jQuery);

但不是:

jQuery.log = function(message) {
  if(window.console) {
     console.debug(message);
  } else {
     alert(message);
  }
};

这适用于大多数事情,但我想做的是能够在第一次调用返回的对象上调用第二个函数。

var actionBox = $('actionBox').actionList(options);

//Many light-cycles later

actionBox.refreshData(data);

或者甚至可能:

$('actionBox').actionList(options);

// laaateerr

$('actionBox').actionList.refreshData(data);

我猜这些中的一个或两个是不可能的,或者至少不可取,但我现在才进入jQuery和javascript的最深层次。

有人可以解释如何做到这一点,或者如果不可能或不可取,为什么?他们会做什么呢?

感谢阅读!

2 个答案:

答案 0 :(得分:2)

我不太清楚你得到了什么,但是你可以在第一个函数返回的对象上调用第二个函数 - 事实上,我们非常鼓励从你的插件返回一个jQuery对象,并且你可以在jQuery中链接命令的原因。

使用您的示例

var actionBox = $('actionBox').actionList(options);

//Many light-cycles later

actionBox.refreshData(data);
只要.actionList().refreshData(data)命令都返回jQuery对象,

就可以正常工作。

$('actionBox').actionList.refreshData(data);

需要

$('actionBox').actionList().refreshData(data);

修改

查看jQuery源代码,

jQuery.fn = jQuery.prototype = { 
    /* 
        Load of 'property' functions of jQuery object... 
    */ 
}

所以,向jQuery.fn添加属性(a.k.a插件)扩展了jQuery对象的原型。当你打电话

$(selector, context);

使用jQuery对象的init 属性函数返回一个新的jQuery对象

jQuery = window.jQuery = window.$ = function( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init( selector, context );
},

答案 1 :(得分:1)

我想我有一个可能对你非常有用的插件。它允许您将任何构造函数/对象应用于jQuery,因为它是自己的命名空间。您可以像使用jQuery一样使用'this'来引用对象集。使用此[methodName]将在对象上调用方法等。

http://code.google.com/p/jquery-plugin-dev/source/browse/trunk/jquery.plugin.js

有些代码示例在这里:

http://groups.google.com/group/jquery-dev/browse_thread/thread/664cb89b43ccb92c/34f74665423f73c9?lnk=gst&q=structure+plugin+authoring#34f74665423f73c9

大约是页面的一半。

我希望你觉得它很有用!