Eine Einführung in YUI

Da jQuery die JavaScript-Framework-Landschaft dominiert, sind viele Neulinge nicht mit anderen JavaScript-Frameworks vertraut. Die Wahrheit ist, dass es eine Fülle von ausgezeichneten JavaScript-Frameworks gibt, wie MooTools, Prototype, Ext JS und… YUI! YUI ist zwar nicht so bekannt wie andere Bibliotheken, bietet jedoch eine Fülle von Tools für den Webentwickler. Heute werden wir einen kurzen Überblick über einige Funktionen geben.


Was ist YUI??

YUI (kurz für Yahoo User Interface und ausgesprochen Y-U-I) ist eine Open-Source-JavaScript- und CSS-Bibliothek, die hauptsächlich von Yahoo.com entwickelt wurde. YUI umfasst JavaScript-Hilfsprogramme, ein CSS-Framework (Reset, Raster und Schriftarten), JavaScript-Widgets und -Tools, mit deren Hilfe Sie Ihre Module integrieren und verwalten können.

Es gibt derzeit zwei unterstützte Versionen von YUI. YUI 2, das 2006 eingeführt wurde, enthält den Löwenanteil der YUI-Widgets. YUI 3 wurde 2009 veröffentlicht und verfügt über eine völlig neue Syntax, die die Benutzerfreundlichkeit erheblich verbessert (insbesondere bei der Ereignisbehandlung und beim DOM-Traversal)..


Warum YUI??

Sie fragen sich vielleicht, warum sollte ich überhaupt in Betracht ziehen, ein anderes JavaScript-Framework zu lernen? Jeder Rahmen hat seine Stärken, daher hängt der von Ihnen gewählte Rahmen von Ihren Bedürfnissen ab. Hier sind ein paar Dinge, die YUI wirklich vorhat:

Ok, jetzt, da Sie ein wenig von YUI gehört haben, wollen wir uns etwas Code ansehen!


Einschließlich der Bibliothek

YUI bietet eine große Flexibilität beim Laden der Bibliothek. Schauen wir uns ein paar Möglichkeiten an, wie Sie es schaffen können.

Methode 1: YUI 3-Seed-Datei

Die Seed-Datei ist der bevorzugte Weg, um YUI auf Ihrer Seite zu erhalten. Fügen Sie einfach die YUI-Seed-Datei ein (nur ~ 6 KB), und fügen Sie dann die gewünschten Module über JavaScript hinzu. Schauen wir uns ein Beispiel an:

  

YUI.use () fordert eine Anforderung zum Abrufen der erforderlichen Module an und übergibt eine YUI-Instanz im Callback, die alle erforderlichen Module enthält. YUI 2-Komponenten können auch eingebunden werden, indem der Modulname vorangestellt wird yui2-. Wenn Sie eine YUI 2-Komponente einschließen, können Sie über Y.YUI2 auf die YUI 2-Instanz zugreifen.

Methode 2: YUI 3-Konfigurator

Mit diesem webbasierten Tool können Sie die gewünschten Module auswählen und eine minimierte Datei mit all diesen Abhängigkeiten herunterladen oder verknüpfen (ähnlich wie das jQuery-UI-Tool). Es bietet auch Statistiken darüber, wie die Dateien das Laden von Seiten beeinflussen.

Methode 3: SimpleYUI

SimpleYUI ist ein kürzlich veröffentlichtes Tool, das die Einbindung von YUI für diejenigen vereinfacht, die es gewohnt sind, lediglich eine JavaScript-Bibliothek hinzuzufügen und Zugriff auf alles zu haben. Fügen Sie einfach die SimpleYUI-Datei hinzu und Sie erhalten eine globale YUI-Instanz, die der Y-Variablen mit DOM-Manipulations-, AJAX- und UI-Effektmodulen zugeordnet ist.

  

Mit SimpleYUI können Sie alle anderen YUI-Module weiterhin dynamisch verwenden, indem Sie sie mit der YUI.use-Methode laden.

 Y.use ('dd-drag', Funktion (Y) // Drag & Drop einrichten);

SimpleYUI hat das Potenzial, die Einführung von YUI wirklich zu unterstützen, da es Programmierern, die aus Bibliotheken wie jQuery stammen, wesentlich zugänglicher und vertraut ist.


DOM-Manipulation

Die DOM-Manipulation ist in YUI 3 sehr einfach und die Syntax sollte recht vertraut sein, wenn Sie jQuery in der Vergangenheit verwendet haben.

YUI bietet zwei Methoden zum Abrufen von DOM-Knoten über das Knotenmodul.

  1. Y.one ('selecter') - gibt einen YUI-Knoten zurück, der einen DOM-Knoten darstellt.
  2. Y.all ('selecter') - Gibt eine YUI-NodeList aller Übereinstimmungen zurück

Hier ist ein Beispiel.

 // Y.one var node = Y.one ('# test-div'); // erhalte den Knoten mit der ID test-div var node2 = Y.one (document.body); // Y.one akzeptiert auch ein DOM-Element Y.one ('# my-list'). Get ('id'); // meine-Liste // Y.all var node = Y.all ('# my-list li'); // alle Listeneinträge von my-liste // ketten var varn2 = Y.one ('# my-list'). all ('li'); // Alle Listenelemente von my-list var parent = Y.one ('# my-list'). get ('parentNode'); // gibt übergeordnetes Element von my-list zurück (als YUI-Node-Objekt)

YUI bietet auch eine 'Prüfung'Methode, um zu sehen, ob ein Element mit einem Selektor übereinstimmt

 var node = Y.one ('# test-div'); // Wenn der Knoten die primäre Klasse hat if (node.test ('. primary')) doSomething (); 

YUI bietet auch erhalten und einstellen Methoden zum Bearbeiten von Knotenattributen und Komfortfunktionen wie addClass und removeClass.

 // get und setze Y.one ('# test-div'). get ('id'); Y.one ('# test-div'). Set ('innerHTML', 'Test Content'); // addClass, removeClass Y.one ('# test-div'). addClass ('highlighted'); // fügt Klasse zu einem Div hinzu Y.all ('p'). removeClass ('highlighted'); // entfernt die Klasse aus allen p-Elementen

Veranstaltungen

Ereignisse werden mithilfe von YUIs angefügt auf Methode. Sie können diese Methode entweder auf einem Knoten oder in der YUI-Instanz aufrufen. Zum Beispiel:

 // in YUI-Instanz aufgerufen // myevent | click Namespaces dieses Onclick-Handlers für myevent (wird später zum Entfernen verwendet) Y.on ("myevent | click", function () // etwas tun, "#test p"); // auf NodeList aufgerufen Y.all ("# test p"). on ("myevent | click", function () // etwas tun);

Ein interessantes Merkmal von YUI ist, dass der Selektor nicht sofort eine Übereinstimmung finden muss, wenn Sie die Methode aus dem ersten Beispiel verwenden. Nach dem Laden der Seite wird von YUI bis zu 15 Sekunden lang nach einem Treffer gesucht. Das bedeutet, dass Sie nicht warten müssen, bis das Dokument geladen ist, um es zu verwenden (Sie müssen Ihre Event-Handler nicht umschließen.) in einer document.load-Funktion).

Beachten Sie auch, dass dem Ereignistyp eine optionale Zeichenfolge vorangestellt wurde, die das Ereignis als Namespaces bezeichnet. Sie können dies verwenden, um das Ereignis später zu trennen, wenn Sie dies wünschen.

 Y.all ("# test p"). Detach ("myevent | click");

Sie können auch Ereignisse simulieren…

 Y.one ("# test"). Simulate ("click");

… Und benutzerdefinierte Events abfeuern.

 Y.one ("# test"). Fire ("myevents: custom_event_one");

YUI 3 unterstützt auch Berührungsereignisse, mit denen Sie Ihre JavaScript-Anwendung für mobile Geräte unterstützen können. Ein möglicher Grund dafür ist, dass Sie das "event-touch" -Modul mit YUI.on integrieren müssen, damit die Touch-Events funktionieren.

 Y.one ("# test"). On ('touchstart', function () // ein berührungsereignis gestartet);

AJAX

AJAX-Anforderungen werden über das E / A-Modul von YUI 3 verarbeitet. Ein AJAX-Aufruf erfolgt mit der io Funktion, wie unten gezeigt.

 Y.io ('/ url / to / call', // Dies ist eine Post-Methode: 'POST', // das Formularformular serialisiert: id: "my_form", useDisabled: true, // Ajax Lifecycle-Ereignis Handler für: complete: function (id, response) var data = response.responseText; // Antwortdaten.);

Das IO Die Methode akzeptiert eine URL und ein Konfigurationsobjekt als Parameter. Das Konfigurationsobjekt ist hochgradig konfigurierbar, aber im obigen Beispiel wurden einige der häufigsten Optionen angegeben.

  1. Methode - welche HTTP-Methode verwendet werden soll
  2. bilden - Wenn diese Option angegeben ist, wird das Formular mit der angegebenen ID serialisiert und mit der Anforderung übergeben.
  3. auf - Dieses Objekt richtet Ereignisbehandlungsroutinen für verschiedene Phasen des Anforderungslebenszyklus ein.

YUI's io Mit diesem Modul können Sie auch domänenübergreifende Anforderungen mithilfe einer von Yahoo bereitgestellten Flash-Datei senden. Es gibt jedoch einige Einschränkungen. Erstens müssen Sie eine Kopie der YUI-Flash-Datei auf Ihrem Server haben, um die Anforderung tatsächlich ausführen zu können. Zweitens muss die Domäne, auf die Sie zugreifen, über eine domänenübergreifende Richtliniendatei verfügen, die Ihnen Zugriff gewährt.

 Y.io ('http: //www.somedomain/web/service/', Methode: 'POST', data: 'data = 123', // use flash xdr: use: 'flash', dataType: ' xml ' // ajax Lifecycle-Ereignishandler für: complete: function (id, response) var data = response.responseText; // Antwortdaten.);

JSONP wird ebenfalls unterstützt, jedoch über die YUI JSONP Modul, nicht das IO Modul.

 Y.jsonp (someurl, function (Antwort) // Handle jsonp response);

Ein weiteres Modul, das in Verbindung mit AJAX sehr nützlich ist, ist das JSON-Modul. Auf diese Weise können Sie AJAX-Anforderungen, die JSON zurückgeben, problemlos analysieren. JSON kann mit der JSON.parse-Methode analysiert werden

 var obj = Y.JSON.parse (response.responseText);

Animation

YUI 3 enthält ein Animationsmodul, mit dem so ziemlich jede Art von Animation ausgeführt werden kann. Die Syntax unterscheidet sich etwas von jQuery, also werfen wir einen Blick darauf.

Animationen finden in mehreren Schritten in YUI statt. Zuerst richten Sie ein neues Animationsobjekt ein, das Ihre Animation beschreibt, und führen Sie es dann aus.

 // Animiere ein div von einer Größe bis zu einer Höhe und Breite von 100 var animation = new Y.Anim (node: '# my-div', // Selektor für den Knoten, dessen Animationen Sie durchführen möchten. // Werte, aus denen animiert werden soll (optional) from: height: 0, width: 0, // zu animierende Werte zu: height: 100, width: 100, duration: 0.5, // Dauer der Beschleunigung einstellen: Y.Easing.easeOut // Lockerung einstellen); animation.run ();

Alle Eigenschaften können mit geändert werden .erhalten() und .einstellen() auf dem Animationsobjekt, sodass Sie die Animation oder die DOM-Elemente zum Animieren ändern können. Animationen lösen auch Ereignisse aus, die auch gehört werden können.

 // Animation ist ein Y.Anim-Objekt animation.on ('end', function () // wird nach Beendigung der Animation ausgelöst);

Mit dem YUI-Animationsobjekt können Sie alle Arten von Animationen in Ihrer Anwendung erstellen.


Widgets

Eine der schönsten Funktionen von YUI sind die Widgets. YUI 3 verfügt derzeit über eine begrenzte Anzahl von Widgets (Registerkarten, einen Schieberegler und eine Überlagerung, um nur einige zu nennen), bietet jedoch ein leistungsfähiges Framework zum Erstellen eigener YUI 3-Widgets. Auf der anderen Seite verfügt YUI 2 über eine riesige Bibliothek von Widgets. Hier sind ein paar:

  • DataTable - Ein komplettes Datentabellen-Widget mit Ajax-Laden und -Paginierung, Unterstützung für editierbare Zellen, anpassbaren Spalten und progressiver Verbesserung.
  • ImageCropper - Ein Widget, das beim Beschneiden von Bildern hilft.
  • LayoutManager - Widget zum Erstellen komplexer Layouts über JavaScript.
  • Kalender - Ein Popup-Kalender-Widget.

Es gibt viele weitere Widgets, die Sie verwenden können. Sie finden sie alle auf der YUI 2-Entwickler-Website

.


CSS-Bibliotheken

Die letzte Komponente, die wir uns kurz ansehen, sind die YUI-CSS-Bibliotheken. YUI 3 bietet vier CSS-Ressourcen.

  • CSS Reset - grundlegende CSS-Reset-Regeln. Jeder hat seine eigene Vorstellung davon, was eine Reset-Datei tun soll, daher mag diese Datei möglicherweise nicht gefallen.
  • CSS Base - Diese Stile bauen auf den Reset-Stilen auf, um ein konsistentes Rendering für alle unterstützten Browser zu ermöglichen. Diese Datei enthält Elemente wie Eingabestile, Kopfgrößen und Tabellenstile.
  • CSS-Schriftarten - normalisiert die Schriftgröße in allen unterstützten Dateien. Sobald dieses Stylesheet angewendet wurde, werden die Schriftgrößen mit Prozentwerten entsprechend einer von YUI bereitgestellten Tabelle geändert. Die YUI-CSS-Schriftarten-Ressource wird von der beliebten HTML5Boilerplate verwendet.
  • CSS-Grids - ein CSS-Raster-Framework, das Sie beim Layout unterstützen können. Ich bin kein Fan von Grids im Allgemeinen, aber wenn Sie mehr erfahren möchten, hat Andrew Burgess eine nette Beschreibung über Nettuts+.

Fazit

Dies war nur ein kurzer Blick auf einige der von YUI angebotenen Komponenten und Module. Wenn dieser Artikel Ihr Interesse geweckt hat, empfehle ich Ihnen, sich die YUI-Entwicklerdokumentation anzusehen und herauszufinden, was YUI sonst noch bietet. Was sind deine Eindrücke? Wenn Sie YUI in der Vergangenheit verwendet haben, was halten Sie davon??