jQuery UI API - Widget-Factory
Kategorie
jQuery.widget( name [, base ], prototype ) Verwendung
Beschreibung:Erstellen Sie zustandsbehaftete jQuery-Plugins unter Verwendung derselben Abstraktion wie alle jQuery-UI-Widgets.
| Parameters | Type | Type |
|---|---|---|
| name | String | Der Name des zu erstellenden Widgets, einschließlich des Namespace. |
| Basis | Function() | Das Basis-Widget, von dem geerbt werden soll. Muss ein Konstruktor sein, der mit dem Schlüsselwort `new` instanziiert werden kann. Standardmäßig ist es jQuery.Widget. |
| prototype | PlainObject | Das Objekt, das als Widget-Prototyp verwendet werden soll. |
Sie können$.Widgetein Objekt als Basis, von der geerbt wird, oder Sie können explizit ein neues Widget von Grund auf neu basierend auf einem vorhandenen jQuery-UI- oder Drittanbieter-Steuerelement erstellen. Wenn Sie ein Widget mit demselben Namen definieren, um vom Basis-Widget zu erben, können Sie das Widget sogar entsprechend erweitern.
jQuery UI enthält viele zustandsbehaftete Widgets, daher unterscheidet sich das Verwendungsmuster geringfügig von typischen jQuery-Plugins. Alle jQuery-UI-Widgets verwenden dasselbe Muster, das von der Widget-Factory definiert wird. Wenn Sie also einmal gelernt haben, eines zu verwenden, wissen Sie, wie Sie die anderen Widgets verwenden.
Hinweis: Dieses Kapitel verwendet dasProgressbar Widgetals Demonstrationsbeispiel, aber die Syntax gilt für jedes Widget.
Initialisierung
Um den Zustand des Widgets zu verfolgen, müssen wir den vollständigen Lebenszyklus des Widgets einführen. Der Lebenszyklus beginnt, wenn das Widget initialisiert wird. Um ein Widget zu initialisieren, rufen wir einfach das Plugin auf einem oder mehreren Elementen auf.
$( "#elem" ).progressbar();
Dies initialisiert jedes Element im jQuery-Objekt. Im obigen Beispiel ist die Element-ID `progressbar`."elem"。
Optionen
Weilprogressbar()wird es ohne Argumente aufgerufen, wird das Widget mit Standardoptionen initialisiert. Wir können bei der Initialisierung eine Reihe von Optionen übergeben, um die Standardoptionen zu überschreiben:
$( "#elem" ).progressbar({ value: 20 });
Wir können so viele Optionen übergeben, wie nötig, und alle Optionen, die wir nicht übergeben, verwenden ihre Standardwerte.
Sie können mehrere Optionsargumente übergeben, die zu einem einzigen Objekt zusammengeführt werden (ähnlich wie$.extend( true, target, object1, objectN )`$.extend`). Dies ist nützlich, um einige Einstellungen für alle Instanzen zu überschreiben und Optionen zwischen Instanzen gemeinsam zu nutzen:
var options = { modal: true, show: "slow" };
$( "#dialog1" ).dialog( options );
$( "#dialog2" ).dialog( options, { autoOpen: false });
Alle bei der Initialisierung übergebenen Optionen werden tief kopiert, wodurch sichergestellt wird, dass Objekte später geändert werden können, ohne das Widget zu beeinflussen. Arrays sind die einzige Ausnahme; sie werden unverändert referenziert. Diese Ausnahme dient der ordnungsgemäßen Unterstützung der Datenbindung, bei der die Datenquelle eine Referenz sein muss.
Standardwerte werden in den Eigenschaften des Widgets gespeichert, sodass wir die von jQuery UI festgelegten Werte überschreiben können. Nach der folgenden Einstellung werden beispielsweise alle zukünftigen progressbar-Instanzen standardmäßig den Wert 80 haben:
$.ui.progressbar.prototype.options.value = 80;
Optionen sind ein integraler Bestandteil des Zustands des Widgets, daher können wir Optionen auch nach der Initialisierung festlegen. Wir werden die option-Methode später sehen.
Methoden
Nachdem das Widget initialisiert wurde, können wir seinen Zustand abfragen oder Aktionen auf dem Widget ausführen. Alle Aktionen nach der Initialisierung werden durch Aufrufen von Methoden ausgeführt. Um eine Methode auf dem Widget aufzurufen, übergeben wir den Methodennamen an das jQuery-Plugin. Zum Beispiel, um dievalue()`value` 方法,我们可以使用:
$( "#elem" ).progressbar( "value" );
如果方法接受参数,我们可以在方法名之后传递它们。例如,要将参数 `2` 传递给40aufvalue()`value` 方法,我们可以使用:
$( "#elem" ).progressbar( "value", 40 );
与 jQuery 中的其他方法一样,大多数小部件方法返回 jQuery 对象:
$( "#elem" ) .progressbar( "value", 90 ) .addClass( "almost-done" );
每个小部件都有自己的一组方法,这些方法基于该小部件提供的功能。然而,有些方法存在于所有小部件上,下面将详细解释。
Ereignisse
所有小部件都有与其各种行为关联的事件,以便在状态改变时通知你。对于大多数小部件,当事件被触发时,其名称会加上小部件名称的小写形式作为前缀。例如,我们可以绑定 progressbar 的change`change` 事件,它在值改变时触发。
$( "#elem" ).bind( "progressbarchange", function() {
alert( "The value has changed!" );
});
每个事件都有一个对应的回调,可作为选项使用。如果需要,我们可以挂接到 progressbar 的change`change` 回调,而不是绑定progressbarchange`change` 事件。
$( "#elem" ).progressbar({
change: function() {
alert( "The value has changed!" );
}
});
所有小部件都有一个change`create` 事件,它在实例化时触发。
实例化
Die Widget-Instanz wird unter Verwendung des vollständigen Namens des Widgets als Schlüssel injQuery.data()`data` gespeichert. Daher können Sie den folgenden Code verwenden, um das Instanzobjekt des Progressbar-Widgets von einem Element abzurufen.
$( "#elem" ).data( "ui-progressbar" );
Ob ein Element an ein bestimmtes Widget gebunden ist, kann mit dem:data`:ui-progressbar`-Selektor erkannt werden.
$( "#elem" ).is( ":data( 'ui-progressbar' )" ); // true $( "#elem" ).is( ":data( 'ui-draggable' )" ); // false
Du kannst auch:dataum eine Liste aller Elemente zu erhalten, die Instanzen eines bestimmten Widgets sind.
$( ":data( 'ui-progressbar' )" );
Eigenschaften
Alle Widgets haben die folgenden Eigenschaften:
- defaultElement`defaultElement`: Das Element, das verwendet werden soll, wenn beim Erstellen der Widget-Instanz kein Element angegeben wurde. Zum Beispiel, da das
defaultElementJa"<div>",$.ui.progressbar({ value: 50 })`defaultElement` des Progressbars ein neu erstelltes<div>`div` ist, können Sie eine Progressbar-Widget-Instanz instanziieren, ohne ein Element zu übergeben. - document`document`: Das Dokument, das das Element des Widgets enthält.
documentNützlich, wenn Sie mit dem Widget innerhalb eines iframe interagieren müssen. - element`element`: Ein jQuery-Objekt, das das Element enthält, das zum Instanziieren des Widgets verwendet wird. Wenn Sie mehrere Elemente auswählen und aufrufen
.myWidget()`.progressbar()`, für jedes Element wird eine separate Widget-Instanz erstellt. Daher enthält diese Eigenschaft immer ein Element. - namespace`namespace`: Der Ort im globalen jQuery-Objekt, an dem der Widget-Prototyp gespeichert ist. Zum Beispiel,
"ui"vonnamespace`$.ui.draggable` gibt an, dass der Widget-Prototyp gespeichert ist in$.ui。 - options`$.ui.draggable`. `options`: Ein Objekt, das die aktuell vom Widget verwendeten Optionen enthält. Bei der Instanziierung werden alle vom Benutzer bereitgestellten Optionen automatisch zusammengeführt mit
$.myNamespace.myWidget.prototype.optionsden im Widget-Prototyp definierten Standardwerten. Vom Benutzer angegebene Optionen überschreiben die Standardwerte. - uuid`uuid`: Eine eindeutige Ganzzahl, die den Widget-Bezeichner darstellt.
- version`version`: Die String-Version des Widgets. Bei jQuery UI-Widgets ist diese Eigenschaft auf die Version von jQuery UI gesetzt, die vom Widget verwendet wird. Plugin-Entwickler müssen diese Eigenschaft explizit in ihren Prototypen festlegen.
- widgetEventPrefix`widgetEventPrefix`: Das Präfix, das den Ereignisnamen des Widgets vorangestellt wird. Zum Beispieldas Draggable-Widgetvon
widgetEventPrefixJa"drag", also wenn ein Draggable erstellt wird, lautet der Ereignisname"dragcreate"`dragcreate`. Standardmäßig ist derwidgetEventPrefix`widgetEventPrefix` sein Name.Hinweis: Diese Eigenschaft ist veraltet und wird in zukünftigen Versionen entfernt. Ereignisnamen werden zu widgetName:eventName geändert (zum Beispiel `progressbarcreate`)."draggable:create")。 - widgetFullName`widgetFullName`: Der vollständige Name des Widgets, einschließlich des Namespace. Für
$.widget( "myNamespace.myWidget", {} ),widgetFullNameder Fortschrittsbalken, dies wird `ui-progressbar` sein."myNamespace-myWidget"。 - widgetName`name`: Der Name des Widgets. Für
$.widget( "myNamespace.myWidget", {} ),widgetNameder Fortschrittsbalken, dies wird `progressbar` sein."myWidget"。 - window`window`: Das Fenster, das das Element des Widgets enthält.
windowNützlich, wenn Sie mit dem Widget innerhalb eines iframe interagieren müssen.
jQuery.Widget Verwendung des Basis-Widgets
Beschreibung:Das Basis-Widget, das von der Widget Factory verwendet wird.
Schnellnavigation
| Optionen | Methoden | Ereignisse |
|---|---|---|
| Optionen | Type | Beschreibung | Standard |
|---|---|---|---|
| disabled | Boolean | Wenn festgelegt auftrue`true`, das Widget ist deaktiviert.Codebeispiele: Initialisieren Sie ein Widget mit der angegebenen
$( ".selector" ).widget({ disabled: true });
Abrufen oder Festlegen der // getter var disabled = $( ".selector" ).widget( "option", "disabled" ); // setter $( ".selector" ).widget( "option", "disabled", true ); |
false |
| hide | Boolean oder Number oder String oder Object | Ob und wie Animationen verwendet werden, um das Element auszublenden. Mehrere Typen werden unterstützt:
Codebeispiele: Initialisieren Sie das Widget mit dem angegebenen
$( ".selector" ).widget({ hide: { effect: "explode", duration: 1000 } });
Nach der Initialisierung abrufen oder festlegen
// getter
var hide = $( ".selector" ).widget( "option", "hide" );
// setter
$( ".selector" ).widget( "option", "hide", { effect: "explode", duration: 1000 } );
|
null |
| show | Boolean oder Number oder String oder Object | Ob das Element mit einer Animation angezeigt werden soll und wie die Anzeige animiert werden soll. Unterstützt mehrere Typen:
Codebeispiele: Initialisieren Sie das Widget mit dem angegebenen
$( ".selector" ).widget({ show: { effect: "blind", duration: 800 } });
Nach der Initialisierung abrufen oder festlegen
// getter
var show = $( ".selector" ).widget( "option", "show" );
// setter
$( ".selector" ).widget( "option", "show", { effect: "blind", duration: 800 } );
|
null |
| Methoden | Gibt zurück | Beschreibung |
|---|---|---|
| _create() | jQuery (nur Plugin) | _create()Methode ist der Konstruktor des Widgets. Sie nimmt keine Argumente entgegen, aberthis.elementundthis.optionsist bereits gesetzt.
Codebeispiele: Setzt die Hintergrundfarbe des Widget-Elements basierend auf einer Option.
_create: function() {
this.element.css( "background-color", this.options.color );
}
|
| _delay( fn [, delay ] ) | Number | Ruft die bereitgestellte Funktion nach der angegebenen Verzögerung auf. Behältthisden korrekten Kontext bei. Im WesentlichensetTimeout()。verwendet clearTimeout()gibt die Timeout-ID zurück.
Codebeispiele: Nach 100 Millisekunden, auf dem Widget, rufe die this._delay( this._foo, 100 ); |
| _destroy() | jQuery (nur Plugin) | Die öffentlichedestroy()Methode löscht alle öffentlichen Daten, Ereignisse usw. Sie stellt die benutzerdefinierte, widget-spezifische Bereinigung dar._destroy()。
Codebeispiele: Entfernt eine Klasse aus dem Element des Widgets, wenn das Widget zerstört wird.
_destroy: function() {
this.element.removeClass( "my-widget" );
}
|
| _focusable( element ) | jQuery (nur Plugin) | Legt, wenn ein Element fokussiert wird, dieui-state-focusanzuwendende Klasse fest.element。
Codebeispiele: Wendet Fokussierungsstil auf eine Gruppe von Elementen innerhalb des Widgets an: this._focusable( this.element.find( ".my-items" ) ); |
| _getCreateEventData() | Objekt | Alle Widgets lösencreateEvents aus. Standardmäßig werden keine Daten im Event bereitgestellt, aber diese Methode gibt ein Objekt zurück, das übergeben wird alscreateEvent-Daten.
Codebeispiele: in Richtung
_getCreateEventData: function() {
return this.options;
}
|
| _getCreateOptions() | Objekt | Diese Methode ermöglicht es dem Widget, eine benutzerdefinierte Methode zum Definieren von Optionen während der Initialisierung festzulegen. Vom Benutzer bereitgestellte Optionen überschreiben die von dieser Methode zurückgegebenen Optionen, d. h., sie überschreiben die Standardoptionen.
Codebeispiele: Macht das id-Attribut des Widget-Elements als Option verfügbar.
_getCreateOptions: function() {
return { id: this.element.attr( "id" ) };
}
|
| _hide( element, option [, callback ] ) | jQuery (nur Plugin) | Blendet ein Element mithilfe einer integrierten Animationsmethode oder eines benutzerdefinierten Effekts aus. Für möglicheoptionWerte, siehehide。
Codebeispiele: Übergibt
this._hide( this.element, this.options.hide, function() {
// Remove the element from the DOM when it's fully hidden.
$( this ).remove();
});
|
| _hoverable( element ) | jQuery (nur Plugin) | Legt beim Hovern über ein Element dieui-state-hoveranzuwendende Klasse fest.element. Event-Handler werden bei destroy automatisch bereinigt.
Codebeispiele: Beim Hovern über das Element, auf alle Elemente innerhalb des Elements, this._hoverable( this.element.find( "div" ) ); |
| _init() | jQuery (nur Plugin) | Das Konzept der Widget-Initialisierung unterscheidet sich von der Erstellung. Immer wenn das Plugin ohne Argumente oder nur mit einem Options-Hash aufgerufen wird, wird das Widget initialisiert. Diese Methode wird beim Erstellen des Widgets eingebunden. Hinweis: Wenn logische Aktionen ausgeführt werden sollen, wenn das Widget erfolgreich ohne Argumente aufgerufen wird, kann die Initialisierung nur zu diesem Zeitpunkt behandelt werden.
Codebeispiele: Wenn die
_init: function() {
if ( this.options.autoOpen ) {
this.open();
}
}
|
| _off( element, eventName ) | jQuery (nur Plugin) | Entbindet Event-Handler vom angegebenen Element.
Codebeispiele: Hebt die Bindung aller Click-Events vom Element des Widgets auf. this._off( this.element, "click" ); |
| _on( [suppressDisabledCheck ] [, element ], handlers ) | jQuery (nur Plugin) | Delegation über Selektoren innerhalb des Ereignisnamens wird unterstützt, zum Beispiel"click .foo"。_on()Die Methode bietet mehrere Vorteile gegenüber der direkten Ereignisbindung:
Codebeispiele: Verhindert das Standardverhalten aller angeklickten Links innerhalb des Widget-Elements.
this._on( this.element, {
"click a": function( event ) {
event.preventDefault();
}
});
|
| _setOption( key, value ) | jQuery (nur Plugin) | Für jede einzelne Option wird die_setOptions()Methode aufgerufen. Der Widget-Status wird aktualisiert, während Änderungen vorgenommen werden.
Codebeispiele: Wenn sich die
_setOption: function( key, value ) {
if ( key === "width" ) {
this.element.width( value );
}
if ( key === "height" ) {
this.element.height( value );
}
this._super( key, value );
}
|
| _setOptions( options ) | jQuery (nur Plugin) | Wenn dieoption()Methode aufgerufen wird, unabhängig davon, in welcher Form sie aufgerufen wirdoption(). Wenn Sie prozessorintensive Handler aufgrund mehrerer Optionsänderungen ändern müssen, ist das Überschreiben dieser Methode sinnvoll.
Codebeispiele: Wenn sich die
_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();
}
}
|
| _show( element, option [, callback ] ) | jQuery (nur Plugin) | Zeigt ein Element mithilfe einer integrierten Animationsmethode oder eines benutzerdefinierten Effekts an. Für möglicheoptionWerte, sieheshow。
Codebeispiel: Benutzerdefinierte Animation übergeben
this._show( this.element, this.options.show, function() {
// Focus the element when it's fully visible.
this.focus();
}
|
| _super( [arg ] [, ... ] ) | jQuery (nur Plugin) | Ruft die gleichnamige Methode auf dem übergeordneten Widget mit allen angegebenen Argumenten auf. Im Wesentlichen,.call()。
Codebeispiel: Handle
_setOption: function( key, value ) {
if ( key === "title" ) {
this.element.find( "h3" ).text( value );
}
this._super( key, value );
}
|
| _superApply( arguments ) | jQuery (nur Plugin) | Ruft die gleichnamige Methode auf dem übergeordneten Widget mit einem Array von Argumenten auf. Im Wesentlichen,.apply()。
Codebeispiel: Handle
_setOption: function( key, value ) {
if ( key === "title" ) {
this.element.find( "h3" ).text( value );
}
this._superApply( arguments );
}
|
| _trigger( type [, event ] [, data ] ) | Boolean | Löst ein Ereignis und seinen zugehörigen Callback aus. Die Option mit diesem Namen entspricht dem Typ, der als Callback aufgerufen wird. Der Ereignisname ist eine Zeichenkette in Kleinbuchstaben aus dem Widget-Namen und dem Typ. Hinweis: Wenn Daten angegeben werden, müssen alle drei Parameter angegeben werden. Wenn kein Ereignis übergeben wird, übergeben Sie Wenn das Standardverhalten verhindert wird, gibt es zurück
Codebeispiel: Wenn eine Taste gedrückt wird, löse das aus
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()
});
}
});
|
| destroy() | jQuery (nur Plugin) | Entfernen Sie die Widget-Funktionalität vollständig. Dadurch wird das Element in seinen Zustand vor der Initialisierung zurückversetzt.
Codebeispiel: Zerstören Sie das Widget, wenn ein beliebiger Anker des Widgets angeklickt wird.
this._on( this.element, {
"click a": function( event ) {
event.preventDefault();
this.destroy();
}
});
|
| disable() | jQuery (nur Plugin) | Deaktivieren Sie das Widget.
Codebeispiel: Deaktivieren Sie das Widget, wenn ein beliebiger Anker des Widgets angeklickt wird.
this._on( this.element, {
"click a": function( event ) {
event.preventDefault();
this.disable();
}
});
|
| enable() | jQuery (nur Plugin) | Aktivieren Sie das Widget.
Codebeispiel: Aktivieren Sie das Widget, wenn ein beliebiger Anker des Widgets angeklickt wird.
this._on( this.element, {
"click a": function( event ) {
event.preventDefault();
this.enable();
}
});
|
| option( optionName ) | Objekt | Ruft den Wert ab, der derzeit dem angegebenen zugeordnet istoptionNamezugehöriger Wert.
Codebeispiel: Ruft den this.option( "width" ); |
| option() | PlainObject | Ruft ein Objekt ab, das Schlüssel/Wert-Paare enthält, die den aktuellen Options-Hash des Widgets repräsentieren.
Codebeispiel: Protokollieren Sie die Schlüssel/Wert-Paare jeder Widget-Option zum Debuggen.
var options = this.option();
for ( var key in options ) {
console.log( key, options[ key ] );
}
|
| option( optionName, value ) | jQuery (nur Plugin) | Legt mit dem angegebenenoptionNameden Wert der zugehörigen Widget-Option fest.
Codebeispiel: Setzt die this.option( "width", 500 ); |
| option( options ) | jQuery (nur Plugin) | Legt eine oder mehrere Optionen für das Widget fest.
Codebeispiel: Setzt die
this.option({
width: 500,
height: 500
});
|
| widget() | jQuery | Gibt ein Objekt zurück, das das ursprüngliche Element oder andere zugehörige generierte Elemente enthältjQueryObjekt.
Codebeispiel: Wenn das Widget erstellt wird, platzieren Sie einen roten Rahmen um das ursprüngliche Element des Widgets.
_create: function() {
this.widget().css( "border", "2px solid red" );
}
|
| Ereignisse | Type | Beschreibung |
|---|---|---|
| create( event, ui ) | widgetcreate | Wird ausgelöst, wenn das Widget erstellt wird.
Hinweis: Codebeispiel: Initialisieren Sie das Widget mit dem angegebenen create-Callback:
$( ".selector" ).widget({
create: function( event, ui ) {}
});
Binden Sie einen Event-Listener an das widgetcreate-Ereignis:
$( ".selector" ).on( "widgetcreate", function( event, ui ) {} );
|