0
我想知道是否有可能從函數返回一個jQuery小部件實例。自從我想出了一種完全不同的方式來做我想做的事情,所以這只是爲了滿足我自己的好奇心。是否有可能從一個函數返回一個jquery小部件?
說我有兩個小工具,一個從另一個繼承。我也有一些代碼可能有一個childWidget,或者它可能有一個parentWidget。但重要的是調用父窗口小部件的方法 - 在這種情況下,doSomething()。我可以編寫一次這段代碼,返回正確的小部件,然後調用doSomething(),而不是每次寫if語句來確定是調用childWidget('doSomething')還是parentWidget('doSomething')?
一個非常基本的例子:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Little widget test</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script>
$(function() {
//create parentWidget with doSomething function
$.widget("custom.parentWidget", {
options: {
widgetName: 'parent'
},
_create: function() {
this.element
// add a class for theming
.addClass(this.options.widgetName);
},
doSomething: function(event) {
alert(this.options.widgetName);
}
});
//create child widget; just overrides the widgetName property
$.widget("custom.childWidget", $.custom.parentWidget, {
options: {
widgetName: 'child'
}
});
//make an instance of each widget
$("#my-widget1").parentWidget();
$("#my-widget2").childWidget();
//function to get the widget instance
$.fn.getWidget = function() {
if($(this).is('.parent'))
return $(this).parentWidget();
return $(this).childWidget();
};
//this does not work
$("#my-widget1").getWidget()('doSomething');
});
</script>
</head>
<body>
<div>
<div id="my-widget1">parent widget</div>
<div id="my-widget2">child widget</div>
</div>
</body>
</html>
因爲'返回$(這個).parentWidget()不返回一個小部件實例,它返回'this'元素的jquery包裝器,即與'$(this)'相同的對象 - 正如你所知,jQuery基於鏈接工作 –
同樣的公共方法使用'$(「#my-widget1」)調用小部件.parentWidget('doSomething');' –
是的,我熟悉所有這些。我的問題是,你是否可以獨立於它所連接的元素來獲得一個小部件的句柄。我認爲答案是否定的,但正如我所說,這是我的好奇心。 –