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');' –
是的,我熟悉所有这些。我的问题是,你是否可以独立于它所连接的元素来获得一个小部件的句柄。我认为答案是否定的,但正如我所说,这是我的好奇心。 –