Javascript Link Handler

  • Huhu,


    ich habe derzeitig das Problem das ich via einem Event Listener, welcher auf einem select Elemt gebindet ist, einen Link aktualisieren möchte.

    Ich dachte mir das würde wunderbar über den Template Tag {link}..{/link} funktionieren, jedoch hab ich da so ein paar Probleme.

    Mein JS Code sieht derweil so aus:

    Code
    1. let smth = elBySel("#smth").value;
    2. let day = elBySel("#day").value;
    3. let link = elBySel("#submitLink");
    4. link.href = "{link controller='LeagueListPage' smth=" + smth + " day=" + day + "}{/link}";

    Hierbei bekomme ich lediglich für die Variablen smth und day nicht die entsprechenden Werte raus sondern diese werden als Text übernommen und als Attribut an den Link hintendran gehangen (Das " und das + werden jeweils in UTF8 HTML Code formatiert und ebenfalls ausgegeben). Weiß da zufällig jemand einen Rat? Die " und + wegzulassen funktioniert auch nicht ganz.

    Die Frage die sich mir auch stellt ist, gibt es einen JS Link Handler von Woltlab der genau so etwas macht ohne den Template Tag nehmen zu müssen?

  • Das ist so nicht machbar, denn der {link} wird Server-seitig ausgeführt, aber das JavaScript im Client. Eine direkte Generierung der Links im JavaScript gibt esnicht, das muss man in so einem Fall anders lösen:

    JavaScript
    1. let smth = elBySel("#smth").value;
    2. let day = elBySel("#day").value;
    3. let link = elBySel("#submitLink");
    4. link.href = "{link controller='LeagueListPage' smth='XsmthX' day=999}{/link}".replace('XsmthX', smth).replace(999, day;

    Es basiert auf der Server-seitigen-Generierung eines Links, bei dem die Parameter eindeutige Werte erthalten, die du anschließend im JavaScript ersetzen kannst. Die Werte sollten so gewählt sein, dass realistisch keine Kollision auftreten kann bzw. sollte.

  • Ist es geplant auch in JS einen solchen Link Handler einzuführen? Aus meiner Sicht ist dies durchaus vorteilhaft.

    Es gibt dazu keine konkreten Planungen, denn die Link-Erzeugung ist deutlich komplexer als nur ein einfaches Aneinanderhängen von Parametern. Das Routing-System erlaubt sehr komplexe Anwendungsfälle, die sich nicht ohne weiteres in JavaScript abbilden lassen, insbesondere wenn die Links von Daten aus der Datenbank abhängig sind.


    Im Normalfall ist es auch gar nicht notwendig diese im JavaScript zu generieren, da man sie üblicherweise vom Server generieren und mitliefern lassen kann, einschließlich bei der AJAX-Kommunikation. Abseits von den Attachments fällt mir ad hoc auch kein Fall ein, in dem eine Generierung im Client notwendig wäre, wobei dieser Fall auch nur aus historischen Gründen so ungünstig gelegen ist.