JqueryUI - fabryka widżetów

Wcześniej jedynym sposobem pisania niestandardowych formantów w jQuery było rozszerzenie przestrzeni nazw $ .fn . Działa to dobrze w przypadku prostych widżetów. Załóżmy, że tworzysz bardziej stanowe widżety, szybko staje się to kłopotliwe. Aby ułatwić proces tworzenia widgetów, w interfejsie użytkownika jQuery wprowadzono narzędzie Widget Factory, które usuwa większość schematu, który jest zwykle związany z zarządzaniem widgetem.

Fabryka widżetów jQueryUI to po prostu funkcja ($ .widget), która przyjmuje nazwę ciągu i obiekt jako argumenty i tworzy wtyczkę jQuery oraz „klasę” w celu hermetyzacji jej funkcjonalności.

Składnia

Poniżej przedstawiono składnię metody jQueryUI Widget Factory -

jQuery.widget( name [, base ], prototype )

name- Jest to ciąg znaków zawierający przestrzeń nazw i nazwę widżetu (oddzieloną kropką) widgetu do utworzenia.

base- Podstawowy widget do dziedziczenia. Musi to być konstruktor, którego instancję można utworzyć za pomocą słowa kluczowego `new`. Domyślnie jQuery.Widget .

prototype- obiekt, który ma być użyty jako prototyp dla widgetu do dziedziczenia. Na przykład interfejs użytkownika jQuery ma wtyczkę „myszy”, na której oparte są pozostałe wtyczki interakcji. Aby to osiągnąć, wszystkie elementy draggable, droppable itp. Dziedziczą po wtyczce myszy, jak na przykład: jQuery.widget ("ui.draggable", $ .ui.mouse, {...}); Jeśli nie podasz tego argumentu, widget odziedziczy bezpośrednio z „podstawowego widgetu” jQuery.Widget (zwróć uwagę na różnicę między małymi literami „w” jQuery.widget i dużymi literami „W” jQuery.Widget).

Podstawowy widget

Podstawowy widget to widget używany przez fabrykę widgetów.

Opcje

W poniższej tabeli wymieniono różne opcje , których można używać z widgetem podstawowym -

Sr.No. Opcja i opis
1 niepełnosprawna skóra

Ta opcja wyłącza widżet, jeśli jest ustawiony na true . Domyślnie jego wartość tofalse.

Option - disabledhide

Ta opcja wyłącza widżet, jeśli jest ustawiony na true . Domyślnie jego wartość tofalse.

Example

$( ".selector" ).widget({ disabled: true });
2 ukryć

Ta opcja określa, jak animować ukrywanie elementu. Domyślnie jego wartość tonull.

Option - hide

Ta opcja określa, jak animować ukrywanie elementu. Domyślnie jego wartość tonull.

Może to być typ -

  • Boolean- Jeśli ustawione na false, żadna animacja nie będzie używana. Element zniknie z domyślnym czasem trwania i domyślnym wygładzaniem, jeśli ma wartość true .

  • Number - Element zniknie z określonym czasem trwania i domyślnym wygładzaniem.

  • String - Element zostanie ukryty przy użyciu określonego efektu.

  • Object- Jeśli wartość jest obiektem, można podać właściwości efektu, opóźnienia, czasu trwania i krzywej dynamiki .

Example

$( ".selector" ).widget({ hide: { effect: "explode", duration: 1000 } });
3 pokazać

Ta opcja określa sposób animacji wyświetlania elementu. Domyślnie jego wartość tonull.

Option - show

Ta opcja określa sposób animacji wyświetlania elementu. Domyślnie jego wartość tonull.

Może to być typ -

  • Boolean- Jeśli ustawione na false, żadna animacja nie będzie używana do pokazania elementu. Element będzie zanikał z domyślnym czasem trwania i domyślnym wygładzaniem, jeśli ma wartość true .

  • Number - Element pojawi się z określonym czasem trwania i domyślnym wygładzaniem.

  • String - Element zostanie wyświetlony przy użyciu określonego efektu.

  • Object- Jeśli wartość jest obiektem, można podać właściwości efektu, opóźnienia, czasu trwania i krzywej dynamiki .

Example

$( ".selector" ).widget({ show: { effect: "explode", duration: 1000 } });

Metody

W poniższej tabeli wymieniono różne metody , których można używać z widgetem podstawowym -

Sr.No. Działanie i opis
1 _Stwórz()

Ta metoda jest konstruktorem widżetu. Nie ma żadnych parametrów, ale opcje this.element i this.options są już ustawione.

Action - _create()

Ta czynność całkowicie niszczy funkcjonalność akordeonu elementu. Elementy wracają do stanu sprzed uruchomienia. Ta metoda jest konstruktorem widżetu. Nie ma żadnych parametrów, ale opcje this.element i this.options są już ustawione.

Example

_create: function() {
   this.element.css( "background-color", this.options.color );
}
2 _delay (fn [, opóźnienie])

Ta metoda wywołuje podaną funkcję po określonym opóźnieniu. Zwraca identyfikator limitu czasu do użycia z clearTimeout () .

Action - _delay( fn [, delay ] )

Ta metoda wywołuje podaną funkcję po określonym opóźnieniu. Zwraca identyfikator limitu czasu do użycia z clearTimeout () .

Example

this._delay( this._foo, 100 );
3 _zniszczyć()

Publiczność zniszczyć () metoda czyści wszystkie standardowe dane, imprez itp, a następnie deleguje się do tego _destroy () metody zwyczaju, widget specyficzne porządki.

Action - _destroy()

Publiczność zniszczyć () metoda czyści wszystkie standardowe dane, imprez itp, a następnie deleguje się do tego _destroy () metody zwyczaju, widget specyficzne porządki.

Example

_destroy: function() {
   this.element.removeClass( "my-widget" );
}
4 _focusable (element)

Ta metoda ustawia element w celu zastosowania klasy ui-state-focus na fokusie. Programy obsługi zdarzeń są automatycznie czyszczone po zniszczeniu.

Action - _focusable( element )

Ta metoda ustawia element w celu zastosowania klasy ui-state-focus na fokusie. Programy obsługi zdarzeń są automatycznie czyszczone po zniszczeniu.

Example

_create: function() {
   this._focusable( this.element.find( ".my-items" ) );
}
5 _getCreateEventData ()

Wszystkie widżety wyzwalają zdarzenie tworzenia . Domyślnie w zdarzeniu nie są dostarczane żadne dane, ale ta metoda może zwrócić obiekt, który zostanie przekazany jako dane zdarzenia create.

Action - _getCreateEventData()

Wszystkie widżety wyzwalają zdarzenie tworzenia . Domyślnie w zdarzeniu nie są dostarczane żadne dane, ale ta metoda może zwrócić obiekt, który zostanie przekazany jako dane zdarzenia create.

Example

_getCreateEventData: function() {
   return this.options;
}
6 _getCreateOptions ()

Ta metoda umożliwia widgetowi zdefiniowanie niestandardowej metody definiowania opcji podczas tworzenia instancji. Opcje dostarczone przez użytkownika zastępują opcje zwrócone przez tę metodę, które zastępują opcje domyślne.

Action - _getCreateOptions()

Ta metoda umożliwia widgetowi zdefiniowanie niestandardowej metody definiowania opcji podczas tworzenia instancji. Opcje dostarczone przez użytkownika zastępują opcje zwrócone przez tę metodę, które zastępują opcje domyślne.

Example

_getCreateOptions: function() {
   return { id: this.element.attr( "id" ) };
}
7 _hide (element, opcja [, wywołanie zwrotne])

Ta metoda natychmiast ukrywa element, używając wbudowanych metod animacji lub efektów niestandardowych. Zobacz opcję ukrywania dla możliwych wartości opcji.

Action - _hide( element, option [, callback ] )

Ta metoda natychmiast ukrywa element, używając wbudowanych metod animacji lub efektów niestandardowych. Zobacz opcję ukrywania dla możliwych wartości opcji.

Example

this._hide( this.element, this.options.hide, function() {
   $( this ).remove();
});
8 _hoverable (element)

Ta metoda ustawia element, aby zastosować klasę ui-state-hover przy aktywowaniu. Programy obsługi zdarzeń są automatycznie czyszczone po zniszczeniu.

Action - _hoverable( element )

Ta metoda ustawia element, aby zastosować klasę ui-state-hover przy aktywowaniu. Programy obsługi zdarzeń są automatycznie czyszczone po zniszczeniu.

Example

this._hoverable( this.element.find( "div" ) );
9 _w tym()

Za każdym razem, gdy wtyczka jest wywoływana bez argumentów lub tylko z hashem opcji, widget jest inicjowany; dotyczy to również tworzenia widżetu.

Action - _init()

Za każdym razem, gdy wtyczka jest wywoływana bez argumentów lub tylko z hashem opcji, widget jest inicjowany; dotyczy to również tworzenia widżetu.

Example

_init: function() {
   if ( this.options.autoOpen ) {
      this.open();
   }
}
10 _off (element, nazwa_zdarzenia)

Ta metoda odłącza programy obsługi zdarzeń od określonych elementów.

Action - _off( element, eventName )

Ta metoda odłącza programy obsługi zdarzeń od określonych elementów.

Example

this._off( this.element, "click" );
11 _on ([suppressDisabledCheck] [, element], handlers)

Wiąże programy obsługi zdarzeń z określonymi elementami. Delegowanie jest obsługiwane przez selektory wewnątrz nazw zdarzeń, np. „Click .foo”.

Action - _on( [suppressDisabledCheck ] [, element ], handlers )

Wiąże programy obsługi zdarzeń z określonymi elementami. Delegowanie jest obsługiwane przez selektory wewnątrz nazw zdarzeń, np. „Click .foo”.

Example

this._on( this.element, {
   "click a": function( event ) {
      event.preventDefault();
   }
});
12 _setOption (klucz, wartość)

Ta metoda jest wywoływana z metody _setOptions () dla każdej opcji. Stan widżetu powinien być aktualizowany na podstawie zmian.

Action - _setOption( key, value )

Ta metoda jest wywoływana z metody _setOptions () dla każdej opcji. Stan widżetu powinien być aktualizowany na podstawie zmian.

Example

_setOption: function( key, value ) {
   if ( key === "width" ) {
      this.element.width( value );
   }
   if ( key === "height" ) {
      this.element.height( value );
   }
   this._super( key, value );
}
13 _setOptions (opcje)

Ta metoda jest wywoływana za każdym razem, gdy wywoływana jest metoda option (), niezależnie od formy, w jakiej została wywołana metoda option ().

Action - _setOptions( options )

Ta metoda jest wywoływana za każdym razem, gdy wywoływana jest metoda option (), niezależnie od formy, w jakiej została wywołana metoda option ().

Example

_setOptions: function( options ) {
   var that = this,
   resize = false;
   $.each( options, function( key, value ) {
      that._setOption( key, value );
      if ( key === "height" || key === "width" ) {
         resize = true;
      }
   });
   if ( resize ) {
      this.resize();
   }
}
14 _show (element, opcja [, wywołanie zwrotne])

Natychmiast pokazuje element, używając wbudowanych metod animacji lub efektów niestandardowych. Zobacz opcję show dla możliwych wartości opcji.

Action - _show( element, option [, callback ] )

Natychmiast pokazuje element, używając wbudowanych metod animacji lub efektów niestandardowych. Zobacz opcję show dla możliwych wartości opcji.

Example

_this._show( this.element, this.options.show, function() {
   // Focus the element when it's fully visible.
   this.focus();
}
15 _super ([arg] [, ...])

Ta metoda wywołuje metodę o tej samej nazwie z widżetu nadrzędnego z dowolnymi określonymi argumentami. Zasadniczo .call ().

Action - _super( [arg ] [, ... ] )

Ta metoda wywołuje metodę o tej samej nazwie z widżetu nadrzędnego z dowolnymi określonymi argumentami. Zasadniczo .call ().

Example

_setOption: function( key, value ) {
   if ( key === "title" ) {
      this.element.find( "h3" ).text( value );
   }
   this._super( key, value );
}
16 _superApply (argumenty)

Wywołuje metodę o tej samej nazwie z widżetu nadrzędnego z tablicą argumentów.

Action - _superApply( arguments )

Wywołuje metodę o tej samej nazwie z widżetu nadrzędnego z tablicą argumentów.

Example

_setOption: function( key, value ) {
   if ( key === "title" ) {
      this.element.find( "h3" ).text( value );
   }
   this._superApply( arguments );
}
17 _trigger (typ [, zdarzenie] [, dane])

Ta metoda wyzwala zdarzenie i skojarzone z nim wywołanie zwrotne. Opcja o nazwie równej typowi jest wywoływana jako wywołanie zwrotne.

Action - _trigger( type [, event ] [, data ] )

Ta metoda wyzwala zdarzenie i skojarzone z nim wywołanie zwrotne. Opcja o nazwie równej typowi jest wywoływana jako wywołanie zwrotne.

Example

this._on( this.element, {
   keydown: function( event ) {
      // Pass the original event so that the custom search event has
      // useful information, such as keyCode
      this._trigger( "search", event, {
         // Pass additional information unique to this event
         value: this.element.val()
      });
   }
});
18 zniszczyć()

Ta metoda całkowicie usuwa funkcjonalność widżetu. Spowoduje to przywrócenie elementu do stanu sprzed inicjalizacji.

Action - destroy()

Ta metoda całkowicie usuwa funkcjonalność widżetu. Spowoduje to przywrócenie elementu do stanu sprzed inicjalizacji.

Example

this._on( this.element, {
   "click a": function( event ) {
      event.preventDefault();
      this.destroy();
   }
});
19 wyłączyć()

Ta metoda wyłącza widżet.

Action - disable()

Ta metoda wyłącza widżet.

Example

this._on( this.element, {
   "click a": function( event ) {
      event.preventDefault();
      this.disable();
   }
});
20 włączyć()

Ta metoda włącza widżet.

Action - enable()

Ta metoda włącza widżet.

Example

this._on( this.element, {
   "click a": function( event ) {
      event.preventDefault();
      this.enable();
   }
});
21 opcja (optionName)

Ta metoda pobiera wartość aktualnie skojarzoną z określoną optionName .

Action - option( optionName )

Ta metoda pobiera wartość aktualnie skojarzoną z określoną optionName .

Example

this.option( "width" );
22 opcja()

Ta metoda pobiera obiekt zawierający pary klucz / wartość reprezentujące bieżący skrót opcji widżetu.

Action - option()

Ta metoda pobiera obiekt zawierający pary klucz / wartość reprezentujące bieżący skrót opcji widżetu.

Example

var options = this.option();
for ( var key in options ) {
   console.log( key, options[ key ] );
}
23 opcja (nazwa_opcji, wartość)

Ta metoda ustawia wartość opcji widgetu skojarzonej z określoną optionName.

Action - option( optionName, value )

Ta metoda ustawia wartość opcji widgetu skojarzonej z określoną optionName.

Example

this.option( "width", 500 );
24 opcja (opcje)

Ta metoda ustawia jedną lub więcej opcji dla widżetu.

Action - option( options )

Ta metoda ustawia jedną lub więcej opcji dla widżetu.

Example

this.option({
   width: 500,
   height: 500
});
25 widget ()

Ta metoda zwraca obiekt jQuery zawierający oryginalny element lub inny odpowiedni wygenerowany element.

Action - widget()

Ta metoda zwraca obiekt jQuery zawierający oryginalny element lub inny odpowiedni wygenerowany element.

Example

_create: function() {
   this.widget().css( "border", "2px solid red" );
}

Wydarzenia

Sr.No. Metoda i opis wydarzenia
1 create (event, ui)

To zdarzenie jest wyzwalane podczas tworzenia widgetu.

Event - create( event, ui )

To zdarzenie jest wyzwalane podczas tworzenia widgetu. Gdzie zdarzenie jest typu Event , a interfejs użytkownika jest typu Object .

Syntax

$( ".selector" ).widget({
   create: function( event, ui ) {}
});

Cykl życia fabryki widżetów jQueryUI

Fabryka widgetów jQueryUI zapewnia obiektowy sposób zarządzania cyklem życia widgetu. Te działania w cyklu życia obejmują -

Tworzenie i niszczenie widżetu: na przykład

$( "#elem" ).progressbar();

Zmiana opcji widżetów: Na przykład

$( "#elem" ).progressbar({ value: 20 });

Wykonywanie wywołań „super” w widżetach podklasowych: na przykład

$( "#elem" ).progressbar( "value" );
or 
$( "#elem" ).progressbar( "value", 40 );

Powiadomienia o wydarzeniach: na przykład

$( "#elem" ).bind( "progressbarchange", function() {
   alert( "The value has changed!" );
});

Przykład

Teraz stwórzmy niestandardowy widżet w poniższym przykładzie. Stworzymy widget przycisku. W poniższych przykładach zobaczymy, jak tworzyć opcje, metody i zdarzenia w widgecie -

Tworzenie niestandardowego widżetu

Najpierw utwórzmy prosty niestandardowy widżet.

<!DOCTYPE html>
<html>
   <head>
      <meta charset = "utf-8">
      <title>jQuery UI Widget - Default functionality</title>
      <link rel = "stylesheet" href = "//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
      <script src = "https://code.jquery.com/jquery-1.10.2.js"></script>
      <script src = "https://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
      
      <script>
         $(function() {
            $.widget("iP.myButton", {
               _create: function() { 
                  this._button = $("<button>"); 
                  this._button.text("My first Widget Button");
                  this._button.width(this.options.width) 
                  this._button.css("background-color", this.options.color);    
                  this._button.css("position", "absolute");   
                  this._button.css("left", "100px");            
                  $(this.element).append(this._button);
               },
            });
            $("#button1").myButton();
         });
      </script>
   </head>
   
   <body>
      <div id = "button1"></div>
   </body>
</html>

Zapiszmy powyższy kod w pliku HTML widgetfactoryexample.htm i otwórz go w standardowej przeglądarce obsługującej javascript, musisz również zobaczyć następujące dane wyjściowe -

Dodawanie opcji do niestandardowego widżetu

W poprzednim przykładzie użyliśmy funkcji _create do utworzenia kontrolki niestandardowej. Jednak użytkownicy na ogół chcą dostosować sterowanie, ustawiając i modyfikując opcje. Możemy zdefiniować obiekt opcji, który przechowuje wartości domyślne dla wszystkich zdefiniowanych opcji. Służy do tego funkcja _setOption . Jest wywoływana dla każdej indywidualnej opcji ustawionej przez użytkownika. Tutaj ustawiamy szerokość i kolor tła przycisku.

<!DOCTYPE html>
<html>
   <head>
      <meta charset = "utf-8">
      <title>jQuery UI Widget - Default functionality</title>
      <link rel = "stylesheet" href = "//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
      <script src = "https://code.jquery.com/jquery-1.10.2.js"></script>
      <script src = "https://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
      
      <script>
         $(function() {
            $.widget("iP.myButton", {
               _create: function() { 
                  this._button = $("<button>"); 
                  this._button.text("My first Widget Button");
                  this._button.width(this.options.width) 
                  this._button.css("background-color", this.options.color);    
                  this._button.css("position", "absolute");   
                  this._button.css("left", "100px");            
                  $(this.element).append(this._button);
               },
               _setOption: function(key, value) { 
                  switch (key) { 
                     case "width": 
                     this._button.width(value); 
                     break; 
                     case "color":
                     this._button.css("background-color",value);
                     break; 
                  } 
               },
            });
            $("#button2").myButton();
            $("#button2").myButton("option", {width:100,color:"#cedc98"});
         });
      </script>
   </head>
   
   <body>
      <div id = "button2"></div>
   </body>
</html>

Zapiszmy powyższy kod w pliku HTML widgetfactoryexample.htm i otwórz go w standardowej przeglądarce obsługującej javascript, musisz również zobaczyć następujące dane wyjściowe -

Dodawanie metod do niestandardowego widżetu

W poniższym przykładzie dodamy metody, z których użytkownik może korzystać i które są bardzo łatwe do wbudowania w framework. Napiszemy metodę Move, która przesuwa przycisk na określoną odległość w poziomie. Aby to zadziałało, musimy również ustawić położenie i lewe właściwości w funkcji _create -

this._button.css("position", "absolute");   
this._button.css("left", "100px");

Następnie użytkownik może teraz wywołać twoją metodę w zwykły sposób interfejsu użytkownika jQuery -

this._button.css("position", "absolute");   
this._button.css("left", "100px");
$("button3").myButton("move", 200);
<!DOCTYPE html>
<html>
   <head>
      <meta charset = "utf-8">
      <title>jQuery UI Widget - Default functionality</title>
      <link rel = "stylesheet" href = "//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
      <script src = "https://code.jquery.com/jquery-1.10.2.js"></script>
      <script src = "https://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>

      <script>
         $(function() {
            $.widget("iP.myButton", {
               _create: function() { 
                  this._button = $("<button>"); 
                  this._button.text("My first Widget Button");
                  this._button.width(this.options.width) 
                  this._button.css("background-color", this.options.color);    
                  this._button.css("position", "absolute");   
                  this._button.css("left", "100px");            
                  $(this.element).append(this._button);
               },
         
               move: function(dx) { 
                  var x = dx + parseInt(this._button.css("left")); 
                  this._button.css("left", x); 
                  if(x>400) { this._trigger("outbounds",{},  {position:x}); }
               }
            });
            $("#button3").myButton();
            $("#button3").myButton("move", 200);
         });
      </script>
   </head>
   
   <body>
      <div id = "button3"></div>
   </body>
</html>

Zapiszmy powyższy kod w pliku HTML widgetfactoryexample.htm i otwórz go w standardowej przeglądarce obsługującej javascript, musisz również zobaczyć następujące dane wyjściowe -

Dodawanie zdarzeń do niestandardowego widżetu

W tym przykładzie pokażemy, jak utworzyć wydarzenie. Aby utworzyć zdarzenie, wystarczy użyć metody _trigger. Pierwszy parametr to nazwa zdarzenia, drugi dowolny standardowy obiekt zdarzenia, który chcesz przekazać, a trzeci dowolny niestandardowy obiekt zdarzenia, który chcesz przekazać.

Tutaj uruchamiamy zdarzenie, gdy przycisk przesunie się poza x = 400. Wszystko, co musisz zrobić, to dodać do funkcji Move -

if(x<400) { this._trigger("outbounds",{}, {position:x}); }

W tym przypadku zdarzenie jest nazywane outbounds, a pusty obiekt zdarzenia jest przekazywany z niestandardowym obiektem zdarzenia, który po prostu dostarcza pozycję jako jedyną właściwość.

Cała funkcja ruchu to -

move: function(dx) {
   var x = dx + parseInt(this._button.css("left")); 
   this._button.css("left", x); 
   if(x<400) { this._trigger("outbounds",{}, {position:x}); }
}

Użytkownik może ustawić funkcję obsługi zdarzeń, po prostu definiując opcję o tej samej nazwie.

$("button4").myButton("option", {
   width: 100, 
   color: "red",
   outbounds:function(e,ui) {
      alert(ui.position);}
});
<!DOCTYPE html>
<html>
   <head>
      <meta charset = "utf-8">
      <title>jQuery UI Widget - Default functionality</title>
      <link rel = "stylesheet" href = "//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
      <script src = "https://code.jquery.com/jquery-1.10.2.js"></script>
      <script src = "https://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
      
      <script>
         $(function() {
            $.widget("iP.myButton", {
               _create: function() { 
                  this._button = $("<button>"); 
                  this._button.text("My first Widget Button");
                  this._button.width(this.options.width) 
                  this._button.css("background-color", this.options.color);    
                  this._button.css("position", "absolute");   
                  this._button.css("left", "100px");            
                  $(this.element).append(this._button);
               },
               move: function(dx) { 
                  var x = dx + parseInt(this._button.css("left")); 
                  this._button.css("left", x); 
                  if(x>400) { this._trigger("outbounds",{},  {position:x}); }
               }
            });
            $("#button4").myButton();
            $("#button4").on("mybuttonoutbounds", function(e, ui) {
               alert("out");
            });
            $("#button4").myButton("move", 500);
         });
      </script>
   </head>
   
   <body>
      <div id = "button4"></div>
   </body>
</html>

Zapiszmy powyższy kod w pliku HTML widgetfactoryexample.htm i otwórz go w standardowej przeglądarce obsługującej javascript, otworzy się okno ostrzegawcze.