[Frage] Typo3 9 - Javascript im Backend TYPO3-Version: 9.5.8

  • morlock morlock
    Padawan
    0 x
    33 Beiträge
    0 Hilfreiche Beiträge
    30. 08. 2019, 14:52

    Hallo Forum!

    Ich bin im Moment dabei ein Update einer Extension für Typo3 9 zu machen (wurde entwickelt zu Beginn von Typo3 7). Das meiste habe ich im Griff, allerdings suche ich nach "best practices" hinsichtlich Javascript im Backend.
    Als Grundinfo: Ich verwende im Frontend und Backend die selben Controller und hatte es so gemacht, dass benötigte Scripte (teilweise nur für FE oder BE) über den PageRenderer hinzugefügt wurden. Das erste Problem (dass ich nicht mehr mit dem DOMContentLoaded-Event bzw. jQuerys .ready arbeiten kann) konnte ich jetzt umschiffen. Allerdings habe ich das Problem, dass aus mir unerfindlichen Gründen das Frontend-Javascript auch im Backend geladen wird.
    Daher meine Frage: hatte schonmal jemand ein vergleichbares Problem bzw. - noch viel beser - hat jemand eine Quelle für "best practices" zu Javascript im Backend von Typo3 9, die über die paar Zeilen zur Verwendung von RequireJS, die in der Core API Dokumentation vorhanden sind, hinausgehen?

    Viele Grüße,
    Christian


  • 1
  • Teisinger Teisinger
    Jedi-Meister
    0 x
    381 Beiträge
    26 Hilfreiche Beiträge
    30. 08. 2019, 19:00

    Ich mach das über den ViewHelper fürs Backend, zum Beispiel:

    <f:be.pageRenderer
    includeRequireJsModules="{
    0: 'TYPO3/CMS/Backend/ContextMenu',
    1: 'TYPO3/CMS/Backend/AjaxDataHandler',
    10: 'TYPO3/CMS/Backend/Modal',
    20: 'TYPO3/CMS/Backend/ContextHelp'
    }"

    includeCssFiles="{
    0: '{f:uri.resource(path:\'Css/Module/Cures.min.css\')}'
    }"

    includeJsFiles="{
    0: '{f:uri.resource(path:\'JavaScript/Module/Cures.min.js\')}'
    }"
    />

    https://github.com/groundstack-org

  • morlock morlock
    Padawan
    0 x
    33 Beiträge
    0 Hilfreiche Beiträge
    02. 09. 2019, 10:14

    Danke für die Antwort! So (mit Ausnahme der RequireJS-Module) hatte ich es bisher auch gemacht (bzw. alternativ über den f:be.container-ViewHelper, was im Endeffekt aber das gleiche Ergebnis hat).

    Ich habe meine eigenen Scripte auf RequireJS umgestellt, so dass ich quasi wieder ein Äquivalent zum DOMContentLoaded-Event habe. Das wollte ich mit zusätzlichen jQuery-Plugins, die ich benötige eigentlich nicht machen, aber da scheint mir keine Wahl zu bleiben.

    Im Prinzip funktioniert jetzt auch alles soweit - eine Sache bleibt aber noch: ich muss teilweise dynamisch Dinge per jQuery in einem Backend-Formular initialisieren. An dieser Stelle hatte ich bisher ebenfalls $(document).ready verwendet - das geht jetzt ja nicht mehr. Ich kann allerdings auch nicht einfach die Sachen in eines meiner Scripte schreiben, weil es ja dynamisch generiert wird.
    Ich könnte jetzt natürlich in Fluid eine Funktion generieren lassen und die durch mein per requreJS geladenes Script ausführen lassen, aber das finde ich doch irgendwie sehr unschön.

    Gibt's da vielleicht eine Alternative?

  • Teisinger Teisinger
    Jedi-Meister
    0 x
    381 Beiträge
    26 Hilfreiche Beiträge
    02. 09. 2019, 20:57

    Ich bin mir nicht ganz sicher, hab da zu wenig Erfahrung was jQuery im BE angeht, da jQuery im BE aber zur Verfügung steht, wüsste ich jetzt nicht warum deine jQuery Plugins nicht funktionieren sollten...

    Was hast du den für eine Fehlermeldung?

    https://github.com/groundstack-org

  • morlock morlock
    Padawan
    0 x
    33 Beiträge
    0 Hilfreiche Beiträge
    05. 09. 2019, 17:25

    Hmm... Aus irgendeinem Grund klappt das mit den E-Mail-Benachrichtigungen nicht ;-)

    Nochmal danke für die Antwort. Wenn ich die jQuery-Plugins "normal" über "includeJsFiles" lade bekomme ich entsprechend die Meldung "jQuery is undefined" (bzw. je nach Umsetzungsart des Plugins "$ is undefined").
    Mir ist die Art wie Typo hier arbeitet offen gesagt etwas unklar - wenn jQuery grundsätzlich im Backend zu Verfügung steht verstehe ich nicht wirklich, warum es nicht auch direkt beim Laden eines Backend-Moduls zur Verfügung steht.

    Wie dem auch sei - damit kann ich auch noch leben. Nur müsste es doch eigentlich eine "standardmäßige" Möglichkeit geben, quasi eine "dynamisch genaute onload"-Funktion für ein BE-Modul aufzurufen... Und die habe ich bislang halt nicht gefunden.

  • 1