2013-09-10 57 views
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> 
+0

因为'返回$(这个).parentWidget()不返回一个小部件实例,它返回'this'元素的jquery包装器,即与'$(this)'相同的对象 - 正如你所知,jQuery基于链接工作 –

+0

同样的公共方法使用'$(“#my-widget1”)调用小部件.parentWidget('doSomething');' –

+0

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

回答

0

根据我的测试,我相当肯定的答案是“不”。

我没看中通过一个共同的功能是漏斗到窗口小部件的所有调用,因为我只需要进行非常简单的调用我的窗口小部件,每个包含一个参数:

$.fn.callMyWidget = function (params) { 
    if ($(this).is('.parent')) { 
     $(this).parentWidget(params); 
    } 
    else { 
     $(this).childWidget(params); 
    } 
} 

//so now I can do this: 
$("#my-widget1").callMyWidget('doSomething'); 
相关问题