2009-07-01 75 views
2

幾乎所有的在我讀過了jQuery教程中的示例,通常使用一個主要的公共職能爲自己選擇的插件。當我說'選擇'插件時,我的意思是不僅僅是一個擴展到jQuery上的靜態函數。是否有可能寫第二非靜態,選擇,priviledged功能的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

我不太清楚你在說什麼,但你可以叫從第一個函數返回的對象上的第二個功能 - 事實上,它是非常鼓勵從你的插件返回一個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... 
    */ 
} 

所以,添加屬性(a.k.a插件)來jQuery.fn延伸jQuery對象的原型。當你調用

$(selector, context); 

返回一個新的jQuery對象,使用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); 
}, 
+0

嘿謝謝你的回覆,如果你能向我展示一個例子,有可能嗎? – 2009-07-01 22:55:24

1

我想我已經得到了可能對你非常有用插件的init財產功能。它可以讓你的任何構造函數/對象適用於jQuery的,因爲它是自己的命名空間,你可以用「這個」,你通常會使用jQuery來引用對象集。使用這種[方法名]將調用一個方法,你的對象,等

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

這是關於網頁下半部。

我希望你覺得它有用!

相關問題