2010-10-15 11 views
53
  • Was sind Drupal Verhaltensweisen überhaupt?
  • Welche Art von Service-Ebene bietet es Modulentwicklern?
  • Welcher Beziehungstyp ist jQuery.ready?
+1

@JoshiConsultancy Allgemeinen eine wirksame Antwort auf Stackoverflow besteht aus einer ** direkte Antwort ** einschließlich Links zu Zitaten und Referenzen. Die meisten Leute, die diese Seite sehen, sind hierher gekommen, indem sie zuerst ** gesucht haben. – dreftymac

Antwort

75

Lange Version: Drupal.behaviors ist nicht nur ein Ersatz für jQuery.ready da diese nur einmal ausgeführt wird (wenn DOM ist bereit für die Manipulation): Verhalten mehrmals während der Seiten Ausführung gebrannt werden kann und sein Wird ausgeführt, wenn neue DOM-Elemente in das Dokument eingefügt werden.

Außerdem könnten Module ein vorhandenes Verhalten überschreiben oder erweitern (z. B. wenn ein Modul ein Verhalten zum Hinzufügen eines Bounce-Effekts auf allen Verbindungen aufweist, könnte ein zweites Modul das Verhalten durch einen anderen Bounce-Effekt ersetzen).

Kurze Version: Es ist modularer, obwohl die Dokumentation verbessert werden könnte.


Auch beginnend in Drupal 7, definierten Einstellungen drupal_add_js (PHP) oder in Drupal.settings.modulename (Javascript) verwenden, werden als zweiten Parameter (die erste der Kontext ist) direkt weitergegeben das Verhalten.

Zum Beispiel:

Drupal.behaviors.changeLinks = function(context, settings){ 
    if (!settings) settings = Drupal.settings.changeLinks; 
    $("a", context).hover(function() { 
     $(this).css('color', settings.color); 
    }); 
}; 

Und wenn einer Ihrer Skript (oder ein anderer) neue Knoten erzeugt, könnte es immer noch das Verhalten auf die neuen Knoten angelegt haben, ohne zu wissen, was andere Module iinstalled sind:

var newNodes = $('<a href="#">Hello</a> <a href="#">World</a>').appendTo('#someDiv'); 

Drupal.attachBehaviors(newNodes); 
+0

Nur um zu beachten, müssen Sie jede Verwendung von $() innerhalb (Funktion ($) {// Code hier)} (jQuery); (Mit aktuellen Versionen von Drupal 7) Offizielle Dokumentation hier: https://www.drupal.org/node/756722#using-jquery –

+0

Was ist der Sinn der Weitergabe von Kontext hier? – AlxVallejo

+0

Der Kontext ist der Chunk aus dem DOM, der geändert wurde. Anfangs ist es das gesamte Dokument. Aber für alle nachfolgenden Aufrufe wird nur der neue hinzugefügte oder geänderte Teil sein. Wenn Sie beispielsweise die Lightbox-Bibliothek verwenden, um etwas Neues in einer Lightbox zu öffnen, haben Sie einen Kontext, der nur den neu hinzugefügten Objekten entspricht. Auf diese Weise wird jede jQuery-Suche/Übereinstimmung in einem begrenzten kleineren Satz von HTML-Elementen anstelle des gesamten Dokuments durchgeführt. Dies verhindert auch die erneute Verarbeitung bereits verarbeiteter Elemente. Es wird empfohlen, $ (". A-thing", Kontext) für die Effizienz zu verwenden, wann immer dies möglich ist. – asiby

8

duplizierte Funktionalität

Beachten Sie, dass die Drupal.behaviors Architektur Duplikate Funktionalität bereits in jQuery.

Auch, wie ich dies schreibe, es scheint, keine Dokumentation oder Fall für Drupal.behaviors außerhalb von Drupal selbst studiert zu sein; und die Dokumentation innerhalb von Drupal (wie oben erwähnt) könnte erheblich von Verbesserungen profitieren. Zum jetzigen Zeitpunkt scheint es so, dass die primäre detaillierte Dokumentation nur für gebührenpflichtige Zugriffe eingeschränkt ist.

Dies bedeutet, dass Sie möglicherweise Leistungsdegradation, Anomalien und unerwartete Ergebnisse nicht im Einklang mit Standard jQuery, die endemisch für die Drupal.behaviors-Ökosystem sind bemerken.

india jQuery Funktionalität

Im Gegensatz zu Drupal.behaviors, die integrierten Funktionalität des Standard-jQuery API ist ausgiebig einschließlich in-line Demonstrationen und Beispiele dokumentiert. Darüber hinaus gibt es zahlreiche Live-Beispiele, die auf Websites wie jsfiddle frei verfügbar sind.

Die Links im Abschnitt see listet auch die jQuery-API-Aufrufe auf, die für die Handhabung neuer DOM-Elemente relevant sind, die in das Dokument eingefügt werden.

Siehe auch

+0

"Es scheint keine Dokumentation zu geben" Sorry, aber das ist einfach falsch. Suchen Sie einfach nach "jquery Drupal.behaviors" und Sie erhalten 85k + Ergebnisse. Hier sind einige auf meiner ersten Seite: https://drupal.org/node/756722 http://blog.amazeelabs.com/de/comment/510193 http://drewish.com/2011/05/11/drupal -javascripting/ Es gibt sicherlich Raum für Verbesserungen, aber wie es aussieht, ist Ihre Antwort mehr FUD als hilfreich. –

+2

// Es scheint keine Dokumentation oder Fallstudien für Drupal.behaviors *** außerhalb von Drupal selbst zu geben *** // (Hervorhebung nicht im Original) Bitte zögern Sie nicht, irgendwelche legitime Klarstellungen oder Korrekturen hinzuzufügen, aber Die Behauptung, die Sie hier gemacht haben, ist nicht korrekt. Am wichtigsten ist, dass Sie die Wörter "außerhalb von Drupal selbst" weggelassen haben. Wenn es andere Frameworks oder Projekte gibt, die Drupal.behaviors übernommen haben, können Sie hier Links hinzufügen und die Qualität der Antwort verbessern. Wie es jetzt steht, widerlegt die Ergänzung nichts in der ursprünglichen Antwort. – dreftymac

+0

Verhaltensweisen sind Drupal-spezifisch und deshalb gibt es außerhalb von Drupal keine Dokumentation oder Anwendungsfälle. Verhalten erweitern jQuery-Funktionalität, sie sind nicht doppelt. Das Senden von Kontext und Einstellungen ist nicht etwas, was jQuery tut. Und sie bieten auch die Integration in das AJAX-Framework von Drupal. Zu sagen, dass sie jQuery duplizieren, zeigt sehr wenig Verständnis für Drupal JavaScript API. – Luxian

2

der Suche nach einer ähnlichen Antwort und kam hier noch ohne Anhaltspunkte. Schließlich fand ein wenig mehr Erklärung (und Beispiele) aus einem Artikel hier: https://benmarshall.me/drupal-behaviors/

Ich bin nicht der ursprüngliche Autor, so kann ich nur einige Texte zitieren:

Was sind Drupal Behaviors?

Kurz gesagt, Drupal.behaviors ist eine modulare und bessere Möglichkeit, implementieren jQuery.ready. Im Gegensatz zu jQuery.ready, das nur einmal ausgeführt wird, wenn das DOM zur Manipulation bereit ist, kann Drupal.behaviors mehrmals während der Seitenausführung ausgeführt werden. Noch besser, sie können ausgeführt werden immer wenn neue DOM-Elemente in das Dokument eingefügt werden (d. H. AJAX angetriebenen Inhalt).

Drupal.behaviors kann auch ein vorhandenes Verhalten überschreiben oder sogar erweitern. Wenn beispielsweise ein Modulverhalten auf allen Verbindungen einen Bounce-Effekt hinzufügt, könnte ein anderes Modul dieses Verhalten durch einen anderen Bounce-Effekt ersetzen.

Ein anderer zusätzlicher Vorteil von Drupal.behaviors (beginnend in Drupal 7), ist die Fähigkeit, die drupal_add_js (PHP) oder Drupal.settings.modulename (JS) und Pass-Einstellungen als zweiten Parameter (die ersten, zu verwenden, der Kontext) zu dem Verhalten.

4

Neben Antworten erwähnt oben auf der wichtigsten Dinge, die Sie Daten von PHP Javascript passieren kann, die als

Passing Werte von PHP Javascript mit „Drupal.settings“

Sie folgt leicht mit Drupal.settings am vorderen Ende zu Javascript Variablen von PHP zur Verfügung stellen mit drupal_add_js() Funktion

<?php 
    drupal_add_js(array('myModule' => array('key' => 'value')), 'setting'); 
?> 

oder

<?php 
$element['#attached']['js'][] = array(
    'type' => 'setting', 
    'data' => array('myModule' => array('key' => 'value')), 
); 
?> 

Dies wird in Javascript als verfügbar sein:

if (Drupal.settings.myModule.key === 'value') { 
    alert('Got it!'); 
    }