2012-10-26 54 views
3

我正在構建一個小部件,但是來自OOP背景,通過函數調用訪問方法似乎很奇怪。使用自己的方法擴展jQueryUI Widget

// create the widget in target_id 
myWidget = jQuery('#target_id').superWidget(); 

// this works and accesses do_something, but it's long and redundant. 
// After all, myWidget is already a superWidget 
myWidget.data('superWidget').do_something('hello'); 

// also works, but is awkward 
myWidget.superWidget('do_something', 'hello'); 

// what I want to be able to do: 
myWidget.do_something('hello'); 

我想應該是可以通過自身擴展Widget時_create被稱爲要做到這一點,但我實際上並不知道如何着手做這工作。

可能嗎?怎麼樣? 我應該避免這是一個真正糟糕的主意嗎?爲什麼?

謝謝!

回答

2

我們不提供這個API的原因是因爲它創造了碰撞。如果小部件提供的方法與現有的jQuery方法具有相同的名稱,會發生什麼情況?如果您在同一元素上初始化多個小部件,會發生什麼情況?這就是說,小部件是純粹的面向對象的包裝,它提供了常見的jQuery API。如果你只想使用OO語法,你可以。

var widget = $.ns.superWidget({}, "#elem"); 
widget.doSomething("hello"); 

$.ns.superWidget函數是一個實際的構造函數。將它作爲函數調用只會導致另一個調用new來強制構造函數的行爲。

你可能有興趣閱讀,其中列出了各種方式直接構造控件實例的jQuery UI 1.9 Upgrade Guide

注:如果您使用jQuery UI的1.8.x的,該元件參數將不接受一個選擇,你必須通過一個DOM元素。

+0

我使用的是1.9,所以這對我很有用。這就是說,我也明白你不希望它以這種方式違約的原因。感謝您提供簡潔而準確的答案。 –

0

對不起,您想調用窗口小部件方法的方式不受支持jQueryUI Widget Factory界面。

http://api.jqueryui.com/jQuery.widget/

+0

我知道這是不支持的,我想知道是否有可能自動延長構件,因此,它會在我建立的小部件的情況下工作。 –