2013-09-10 56 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'); 
相關問題