Template Änderung nach AJax Request

  • Hallo,


    ich stehe etwas auf dem Schlauch.

    Möchte nach einem Ajax Request bestimmte Template Variablen erneut übergeben.


    Um erstmal klein anzufangen, wollte ich das der success Box/Alert angezeigt wird.


    Mein Code:



    Im ACP soll das Template styleAdd die Variable success auf true gesetzt werden.


    Erhalte folgende Fehlermeldung nach dem Request:


    Ich verstehe nicht, was genau unter action gemeint ist? :o

  • Hallo,


    der Aufruf passt so nicht, das Template erwartet entsprechende Variablen (u.a. $action), die aber nie gesetzt worden sind. Wenn es nur darum geht, eine success-Box anzuzeigen, dann braucht es dafür keine AJAX-Request, das geht mit reinem CSS. Allerdings wurde explizit das styleAdd-Template angefordert, was mich ein wenig stutzig macht. Ist es gewollt, dieses Template abzurufen oder war dies einfach nur ein "Auf gut Glück"-Ansatz?

    Alexander Ebert
    Senior Developer WoltLab® GmbH

  • Ich habe vor eine kleine Erweiterung zu basteln.

    Daher war mein Gedanke dies per Ajax umzusetzen, ohne die Seite ständig neu laden zu müssen.


    Bevor ich da jetzt weitere Template Variablen versucht habe so umzusetzen, wollte ich erstmal testen ob ich es mit der success-Box hinkriege.

    Und nur Javascript geht nicht, da ich auch PHP Logik benötige, weshalb ich halt auf Ajax zurückgegriffen habe.


    Mein Gedanke war, sobald ich via Ajax Request meine Änderung getätig habe, soll sich das Template ändern ohne die Seite neuladen zu müssen.

  • Mein Gedanke war, sobald ich via Ajax Request meine Änderung getätig habe, soll sich das Template ändern ohne die Seite neuladen zu müssen.

    Die Änderung selbst muss dabei via JavaScript erfolgen, das Server-seitige Ursprungstemplate nützt dir dafür nichts. Das Template ist dafür da, die gesamte Seite zu rendern und basiert auf den Variablen der eigentlichen Seite.

    Alexander Ebert
    Senior Developer WoltLab® GmbH

  • Ah okay verstehe vielen Dank :)

    Ich muss nochmal nachhacken, wenn ich nach meinem Ajax Request den DOM ändere, wird das click Event nicht erkannt.

    Gibt es eine Funktion um den Dom neuzuladen oder das neue Element zu registrieren?


    Das zweite Modul wird getriggert, wenn man auf TabRemoveBtn klickt.

    Dann soll ein anderer Dialogfenster angezeigt werden. Allerdings geht das nicht, wenn ich appendChild nutze.


    Hatte in der Doku etwas von Dom/ChangeListener gelesen, hat's eventuell etwas damit auf sich?



    Mein zweiter JS Modul, hier wird der appendChild nicht getriggert...

  • Das Problem ist dabei, dass es keine Magie gibt, die dein zweites Modul bzw. dessen Callback aufruft. Darüber hinaus wäre ein erneuter Aufruf auch problematisch, da du nur einen allgemeinen Selektor verwendest und somit erneut auf die bereits bestehenden Button bindest.



    PS:

    JavaScript
    elBySelAll('.TabRemoveBtn', undefined, el => {
        el.addEventListener(WCF_CLICK_EVENT, this.openDialog.bind(this, el));
    });

    Alexander Ebert
    Senior Developer WoltLab® GmbH

  • Aaah verstehe, hab mir auch nochmal elBySelAll in der Doku angeschaut:


    elBySelAll(selector: string, context?: Element, callback: (element: Element) => void): NodeList


    Vielen Vielen Dank! <3