2016-02-28 1 views
5

Angenommen, das folgende dumme Codefragment in einer Plone-5-Seite Vorlage:Plone5 Mockup Widgets wie Pat-pickadate nicht für dynamisch generierten Inhalt arbeitet

<input id="foo" class="pat-pickadate" /> 

<input id="bar" /> 

<script type="text/javascript" > 
     $('#bar').click(function() { 
      $('#bar').addClass("pat-pickadate"); 
     }); 
</script> 

Sie werden zwei Eingänge erhalten. Die erste ist eine schöne Kalendereingabe und die zweite ist beim Start leer. Nach dem Klicken auf die zweite Eingabe wird ihre Klasse auf "pat-pickadate" - wie die erste - gesetzt, aber es wird kein Kalender gerendert.

Ich stieß dabei auf den Grund zu finden, warum meine jquery-UI Overlays anzeigen plone hinzufügen, und bearbeiten Ansichten nicht mehr (Plone5) zeigen Kalender Widgets überhaupt.

Ist dieses Verhalten beabsichtigt? Wenn ja, wie kann man Mock-Up-Widgets in Formularen verwenden, die von AJAX-Aufrufen in Plone 5 dynamisch abgerufen werden? Gibt es einen magischen Aufruf, die Mockup-Maschinerie der DOM-Änderung zu informieren?

Ich habe gelesen, dass Mockup seine eigene Overlay-Technik hat, aber es ist schwer, einige 600 Zeilen komplexen JS-Code umzuschreiben, nur um ein einfaches Widget richtig zu bekommen.

Ich konnte keine Dokumentation oder Beispiele zu diesem Thema finden. Kann mir bitte jemand die richtige Richtung zeigen?

+0

Ich habe die Antwort, die Sie in der Frage bearbeitet haben, entfernt. Stapelüberlauf-Redaktionspraktiken sind, dass Antworten als tatsächliche Antworten und nicht als Bearbeitungen von Fragen veröffentlicht werden sollten. Ich rate auch dringend, dass Sie die wesentlichen Teile der Antwort auf SO setzen und sich auf einen Link nur für zusätzliche Informationen verlassen. Andernfalls ist die Chance nicht zu vernachlässigen, dass Ihre Antwort schlecht erhalten wird. – Louis

Antwort

2

Muster werden beim Laden initialisiert, wenn sich Ihr DOM ändert und neue Elemente enthält, die mit einem Muster gerendert werden sollen, müssen Sie Registry.scan anrufen.

, es zu tun, müssen Sie Ihr Skript wie folgt ändern:

require([ 
    'jquery', 
    'pat-registry' 
], function($, Registry) { 
    $('#bar').click(function() { 
     $('#bar').addClass("pat-pickadate"); 
     Registry.scan($('#bar')); 
    }); 
}) 

Das Skript muss nicht inline, denn nichts garantiert, dass JQuery und/oder benötigen, sind bereits geladen. setzen Sie Ihren Code also in einer JS-Datei getrennt, und sicherstellen, dass es in Ihrer Seite mit einer dieser zwei Möglichkeiten geladen wird:

+0

Vielen Dank für die schnelle Antwort! Ich habe den Code wie vorgeschlagen geändert. Dieser endet in Typeerror up: require ist keine Funktion erfordern ([ Wo finde ich den Verweis bekommen von verlangen –

+1

rechts, Ihr JS-Code nicht inline sein muss, denn nichts garantiert, dass JQuery und/oder erfordern? sind bereits geladen.So setzen Sie Ihren Code in eine getrennte JS-Datei, und fügen Sie es als Ressource (oder Sie können es auch in Ihrem Diazo Thema und laden Sie es in Ihre index.html). – ebrehault

+0

2 Möglichkeiten: - setzen Sie Ihre Datei in Ihrem Diazo Thema und fügen Sie

Verwandte Themen