MB: Material für Code Manipulation

0 56

Material für Code Manipulation

  1. 0
    1. 0
      1. 0
      2. 0
        1. 0
          1. 0
            1. 0
              1. 0
                1. 0
                  1. 0
                    1. 0
                  2. 0
                2. 2
        2. 0
          1. 0
            1. 0
              1. 0
                1. 0
                2. 0
                  1. -2
                    1. 0
                      1. -1
                        1. 1
                          1. 0
                            1. 0
                              1. 0
          2. 0
            1. 0
              1. 0
                1. 0
                  1. 0
                    1. 0
                      1. 0
                  2. 0
                    1. 0
        3. 0
          1. 0
      3. -2
        1. 1

          Isch mach disch minus

          1. 4
            1. -2
          2. 0
            1. 6
            2. 1
              1. 0
                1. 0
                  1. 0
            3. 0
              1. 0
                1. 0
              2. 0
            4. 0
            5. 0
  2. 0
    1. 0

Guten Tag,

Vorab: ich bin Anfänger und Code zu manipulieren ist für mich noch zu hoch. Z.Z. befasse ich mich mit Template Engines daher meine Begeisterung.

Ich möchte gerne wissen in welchem Bereich ich mich bewegen muss um Lern Material einzuholen. Fachbücher, simple Tutorials, usw.

Mögliche Anwendungsbeispiele:

  • Template Engines
  • Transpiler
  • usw.

vlg MB

  1. Guten Tag,

    Vorab: ich bin Anfänger und Code zu manipulieren ist für mich noch zu hoch. Z.Z. befasse ich mich mit Template Engines daher meine Begeisterung.

    Begeisterung ist die beste Voraussetzung!

    Ich möchte gerne wissen in welchem Bereich ich mich bewegen muss um Lern Material einzuholen. Fachbücher, simple Tutorials, usw.

    Mögliche Anwendungsbeispiele:

    Spätestens wenn Du's mit Stringverkettungen der Art

    print "Guten Tag Herr " . $name . ",\n" . "wie geht es Ihnen seit " . $datum . "?" . " Am" . $lastdatum . " schrieben Sie mir, dass Sie Ihren " . $baburtstag . " gefeiert haben und Ihr ältester Sohn " . $age . " alt geworden ist. Das finde ich sehr schön und wünsche Ihnen im Namen meiner Firma " .$firma . " alles erdenklich Gute!";
    

    zu tun bekommst, wirst Du Template-Engines ganz ganz toll finden ;)

    1. Moin pl,

      Begeisterung ist die beste Voraussetzung!

      aber Hallo :)

      Spätestens wenn Du's mit Stringverkettungen der Art

      jo ich will nur wisse wo ich die Hintergrund, Informationen einholen kann. z.B. interessiert mich brennend die Funktion eval(). Zu diesem Beispiel Ich brauche schon Fachwissen um zu verstehen wie's funktioniert. Deswegen wende ich mich an euch ...

      vlg MB

      1. Tach!

        jo ich will nur wisse wo ich die Hintergrund, Informationen einholen kann. z.B. interessiert mich brennend die Funktion eval(). Zu diesem Beispiel Ich brauche schon Fachwissen um zu verstehen wie's funktioniert. Deswegen wende ich mich an euch ...

        Was genau interessiert dich denn daran? Du übergibst gültigen Code als String, und eval() führt ihn aus. Da passiert grundlegend nichts anderes, als was auch beim Script-Start stattfindet. Code in Text-Form wird gelesen/geparst und ausgeführt. Was dabei genau passiert kann interessant sein, aber das eher für die Hersteller der Script-Sprachen-Engines.

        dedlfix.

      2. z.B. interessiert mich brennend die Funktion eval().

        Das Feuer solltest du ganz schnell löschen. Zu eval() gibt es, in jeglicher auftretender Form, eigentlich nur eines zu sagen: eval() is evil.

        Der Nutzen dieser Funktion ist extrem beschränkt, seine fehlerhafte Anwendung hingegen weit verbreitet. Konkret solltest du dir dreimal überlegen, ob du Dritten erlauben möchtest, eigenen Code in deinem Programm auszuführen. Du verlierst damit vollkommen die Kontrolle, insbesondere, was die Sicherheit angeht.

        1. Hallo Die,

          eval() is evil.

          This. 'nuff said.

          LG,
          CK

          1. Tach!

            eval() is evil.

            This. 'nuff said.

            Nö, das läuft auf ein "haben wir schon immer so gemacht" hinaus und das ist nicht kompatibel zur "Energie des Verstehens".

            dedlfix.

            1. Hallo dedlfix,

              eval() is evil.

              This. 'nuff said.

              Nö, das läuft auf ein "haben wir schon immer so gemacht" hinaus

              Nein, das läuft auf „da haben wir aus der Vergangenheit gelernt“ hinaus.

              und das ist nicht kompatibel zur "Energie des Verstehens".

              Die Gründe, die erklären, warum eval evil ist, wurden oft und ausreichend dargelegt. Auch von mir.

              LG,
              CK

              1. Hallo,

                eval() is evil.

                This. 'nuff said.

                Nö, das läuft auf ein "haben wir schon immer so gemacht" hinaus

                Nein, das läuft auf „da haben wir aus der Vergangenheit gelernt“ hinaus.

                und das ist nicht kompatibel zur "Energie des Verstehens".

                Die Gründe, die erklären, warum eval evil ist, wurden oft und ausreichend dargelegt. Auch von mir.

                was ihr immer gegen eval() habt. Das wurde gemacht, um zur Laufzeit erzeugten Code auszuführen. Wobei ich im Funktionsplotter statt eval new Function genommmen habe. Letztendlich kann doch der Seitennutzer mit eval auch nicht mehr Unfug treiben, als in der JS-Konsole.

                Gruß
                Jürgen

                1. Letztendlich kann doch der Seitennutzer mit eval auch nicht mehr Unfug treiben, als in der JS-Konsole.

                  Das Problem ist nicht der Seitennutzer. Du kannst deinen Rechner auch mit der Axt zertrümmern, das ist vollkommen ok. Ich bin mir aber sehr sicher, dass selbst du es nicht ok findest, wenn jemand (hier: Programmautor) einem Dritten (hier: pöser Pube™) diese Axt quasi zurechtlegt – da liegt das Problem. Empfindliche Naturen sehen das Problem eventuell auch schon an dem Punkt, an dem besagtem Jemand die Axt unbeabsichtigt aus der Hand und dir auf den Fuß fällt.

                  Das Einschleusen von Code ist ein Riesenproblem und jede Möglichkeit dazu ist dementsprechend, so es irgend geht, zu vermeiden. In dieser Hinsicht ist es bemerkenswert, dass mittlerweile durchaus darauf geachtet wird, etwa von Benutzern übergebene Parameter für einen SQL-Befehl abzusichern – quasi den Nebeneingang zu verrammeln –, aber das Scheunentor, das direkte Ausführen wirklich jeden beliebigen Codes mittels eval und dergleichen (es geht nicht nur um Javascript) so völlig unkritisch betrachtet wird.

                  1. Tach!

                    Das Einschleusen von Code ist ein Riesenproblem und jede Möglichkeit dazu ist dementsprechend, so es irgend geht, zu vermeiden. In dieser Hinsicht ist es bemerkenswert, dass mittlerweile durchaus darauf geachtet wird, etwa von Benutzern übergebene Parameter für einen SQL-Befehl abzusichern – quasi den Nebeneingang zu verrammeln –, aber das Scheunentor, das direkte Ausführen wirklich jeden beliebigen Codes mittels eval und dergleichen (es geht nicht nur um Javascript) so völlig unkritisch betrachtet wird.

                    So stimmt das ja nun auch wieder nicht. Zum einen kommt es überhaupt nicht darauf an, wo die Daten herkommen, die in ein SQL-Statement eingebettet werden sollen. Alle müssen die Syntaxregeln einhalten, nicht nur die Daten aus Nutzereingaben. Zum anderen gibt es durchaus Situationen in Javascript-Anwendungen, bei denen die Werte für das eval() nicht von außen gesetzt werden können. Für solche Anwendungen sollte es kein Problem. Es geht nicht darum, eval() in Javascript als generell gleichwertig zur Konsole zu betrachten, sondern differenziert die jeweiligen konkreten Umstände zu berücksichtigen.

                    dedlfix.

                    1. In dieser Hinsicht ist es bemerkenswert, dass mittlerweile durchaus darauf geachtet wird, etwa von Benutzern übergebene Parameter für einen SQL-Befehl abzusichern

                      Zum einen kommt es überhaupt nicht darauf an, wo die Daten herkommen, die in ein SQL-Statement eingebettet werden sollen.

                      Das war ein konkretes Beispiel, "In dieser Hinsicht" und "etwa" sind keine sinnlosen Füllwörter.

                      Das Einschleusen von Code ist ein Riesenproblem und jede Möglichkeit dazu ist dementsprechend, so es irgend geht, zu vermeiden.

                      Es geht nicht darum, eval() in Javascript als generell gleichwertig zur Konsole zu betrachten,

                      Ich habe nicht behauptet, dass eval etwas mit der Konsole zu tun hat, ich habe ganz im Gegenteil ausdrücklich geschrieben, dass es völlig wurscht ist, was der Benutzer in seinem Browser mit seiner Konsole anstellt. Das Problem liegt beim Programmierer, nicht beim Betrachter.

                      sondern differenziert die jeweiligen konkreten Umstände zu berücksichtigen.

                      Das schrieb ich bereits:

                      Konkret solltest du dir dreimal überlegen, ob du Dritten erlauben möchtest, eigenen Code in deinem Programm auszuführen.

                      Eine praktikable Abhilfe gerade bei Webanwendungen ist jedoch meiner Meinung nach das generelle Vermeiden von eval und dergleichen (nochmal: es ist nicht nur Javascript betroffen), denn offenkundig hapert es beim "differenzierten Betrachten" ganz gewaltig. Passenderweise ist der Einsatz von eval eine Bequemlichkeit, denn es spart die Arbeit, eine eigene, sichere Umgebung zu schaffen.

                      Wäre alles gut, wäre der Haken nur ein kurzer Schluckauf, gäbe es das Sprüchlein "eval() is evil" nicht. Und überhaupt nicht hilfreich ist die Ansage, das wäre doch alles gar kein Thema.

                  2. Hallo,

                    Letztendlich kann doch der Seitennutzer mit eval auch nicht mehr Unfug treiben, als in der JS-Konsole.

                    Das Problem ist nicht der Seitennutzer. Du kannst deinen Rechner auch mit der Axt zertrümmern, das ist vollkommen ok. Ich bin mir aber sehr sicher, dass selbst du es nicht ok findest, wenn jemand (hier: Programmautor) einem Dritten (hier: pöser Pube™) diese Axt quasi zurechtlegt – da liegt das Problem. Empfindliche Naturen sehen das Problem eventuell auch schon an dem Punkt, an dem besagtem Jemand die Axt unbeabsichtigt aus der Hand und dir auf den Fuß fällt.

                    Das Einschleusen von Code ist ein Riesenproblem und jede Möglichkeit dazu ist dementsprechend, so es irgend geht, zu vermeiden. In dieser Hinsicht ist es bemerkenswert, dass mittlerweile durchaus darauf geachtet wird, etwa von Benutzern übergebene Parameter für einen SQL-Befehl abzusichern – quasi den Nebeneingang zu verrammeln –, aber das Scheunentor, das direkte Ausführen wirklich jeden beliebigen Codes mittels eval und dergleichen (es geht nicht nur um Javascript) so völlig unkritisch betrachtet wird.

                    dann zeig mir bitte, welchen Schaden man mit dieser Seite anrichten kann, den man ohne nicht anrichten könnte, und wie man die Seite so gestalten kann, das die Gefahr beseitigt ist.

                    Gruß
                    Jürgen

                2. was ihr immer gegen eval() habt. Das wurde gemacht, um zur Laufzeit erzeugten Code auszuführen. Wobei ich im Funktionsplotter statt eval new Function genommmen habe. Letztendlich kann doch der Seitennutzer mit eval auch nicht mehr Unfug treiben, als in der JS-Konsole.

                  Es wird eben schwierig bis unmöglich, die Software in einen größeren Zusammenhang einzubetten. Wenn man zum Beispiel sagt, dass man eigene Funktionen auch verlinken können möchte, sodass sie sofort geplottet erscheinen, hat man sofort das Problem, dass beliebiger JS-Code Dritter im Browser eines Nutzers ausgeführt werden kann.

                  Der Plotter ist in der Hinsicht gewissermaßen nur dann „sicher“, wenn er exakt so genutzt wird, wie es im Beispiel der Fall ist.

        2. Liebe Regina,

          Das Feuer solltest du ganz schnell löschen. Zu eval() gibt es, in jeglicher auftretender Form, eigentlich nur eines zu sagen: eval() is evil.

          hast du mich nicht verstanden? Ich möchte es verdeutliches: Ich schrieb "zum Beispiel (z.B.)" und nicht "genau DIESE Funktion in JS"

          z.B. interessiert mich brennend die Funktion eval().

          Ich bin wie gesagt dabei Template Engines zu entwerfen und in TypeScript aus zu programierern und in meine SPA zu integrieren. Allein zum Zwecke des Lernens.

          schöne Weihnachten

          vlg MB

          1. Ich bin wie gesagt dabei Template Engines zu entwerfen und in TypeScript aus zu programierern und in meine SPA zu integrieren. Allein zum Zwecke des Lernens.

            Genau das verstehen die hier nicht und werden das auch nie verstehen. Auf meiner Site verwende ich übrigens auch eine eigens entwickelte TE. Für JS liegt die Funktion xr() in der JS-Datei request.js und arbeitet mit RegEx. Die TE, die ich für Perl entwickelt habe, ist ganz genauso aufgebaut. Das Problem in JS ist jedoch, dass der "." nicht auf den Zeilenumbruch matcht. Gucks Dir mal an, da siehst Du wie ich dieses Problem gelöst habe ;)

            Mit eval() bist Du bei einer TE völlig auf dem falschen Damm, weil es beim Rendern gar nicht darum geht Code in den RAM zu bringen sondern Platzhalter mit Werten zu bestücken. Außerdem besteht die Gefahr, dass Code über das Template eingeschleust wird. Notiere mal irgendwo in einem Text einen einfachen Systembefehl zwischen Backticks und übergebe das der eval()-Funktion ...

            Das gute alte sprintf/printf (c) ist übrigens auch eine TE:

            sprintf "Heute haben wir %s", scalar localtime;

            nur, das halt alle String-Platzhalter %s heißen.

            Na, dann machmal.

            1. Hallo pl,

              Genau das verstehen die hier nicht und werden das auch nie verstehen.

              Pauschalaussage ohne Nutzen und ohne Sinn. Zudem bist du auch einer von denen hier.

              Das gute alte sprintf/printf (c) ist übrigens auch eine TE:

              sprintf "Heute haben wir %s", scalar localtime;

              nur, das halt alle String-Platzhalter %s heißen.

              Die Reihenfolge lässt sich aber ebenso wie in PHP beeinflussen.

              Bis demnächst
              Matthias

              --
              Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
              1. nur, das halt alle String-Platzhalter %s heißen.

                Die Reihenfolge lässt sich aber ebenso wie in PHP beeinflussen.

                Das Problem ist, dass alle Platzhalter %s heißen. D.h., alle Platzhalter haben denselben Namen. Von daher müssen die Daten/Werte für Platzhalter in derselben Reihenfolge geliefert werden wie es das Template vorgibt.

                Idealerweise jedoch sind Platzhalter nicht anonym und werden über ihre Namen zugeordnet:

                xprintf(q(
                   Name: %name
                   Ort:  %ort
                ), {
                   ort  => 'Hamburg',
                   name => 'Otto'
                });
                

                und nur das Template bestimmt die Reihenfolge der Ausgabe. D.h., dass die Reihenfolge der in der an die TE übergebene Datenstruktur überhaupt keine Rolle spielt.

                MfG

                1. @@pl

                  nur, das halt alle String-Platzhalter %s heißen.

                  Die Reihenfolge lässt sich aber ebenso wie in PHP beeinflussen.

                  Das Problem ist, dass alle Platzhalter %s heißen.

                  Das Problem ist ganz deinerseits. Die Platzhalter müssen ja nicht alle %s heißen. Sollten sie auch nicht.

                  Siehe unter „Variables that cannot be reordered“.

                  LLAP 🖖

                  --
                  „Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.“ —Johann Wolfgang von Goethe
                2. Hallo pl,

                  nur, das halt alle String-Platzhalter %s heißen.

                  Die Reihenfolge lässt sich aber ebenso wie in PHP beeinflussen.

                  Das Problem ist, dass alle Platzhalter %s heißen. D.h., alle Platzhalter haben denselben Namen. Von daher müssen die Daten/Werte für Platzhalter in derselben Reihenfolge geliefert werden wie es das Template vorgibt.

                  Nein, auch in Perl geht

                  printf '%2$s %1$s', "Welt", "Hallo";
                  
                  # Hallo Welt
                  

                  Idealerweise jedoch sind Platzhalter nicht anonym und werden über ihre Namen zugeordnet:

                  Ja.

                  Bis demnächst
                  Matthias

                  --
                  Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
                  1. Hallo pl,

                    nur, das halt alle String-Platzhalter %s heißen.

                    Die Reihenfolge lässt sich aber ebenso wie in PHP beeinflussen.

                    Das Problem ist, dass alle Platzhalter %s heißen. D.h., alle Platzhalter haben denselben Namen. Von daher müssen die Daten/Werte für Platzhalter in derselben Reihenfolge geliefert werden wie es das Template vorgibt.

                    Nein, auch in Perl geht

                    printf '%2$s %1$s', "Welt", "Hallo";
                    
                    # Hallo Welt
                    

                    Das ist aber nicht die eigentliche Zweckbestimmung dieser Schablone. So stehts in der Doku:

                    (minimum) width
                                    Arguments are usually formatted to be only as wide as
                                    required to display the given value. You can override the
                                    width by putting a number here, or get the width from the
                                    next argument (with "*") or from a specified argument (e.g.,
                                    with "*2$"):
                    
                                      printf "<%s>", "a";       # prints "<a>"
                                      printf "<%6s>", "a";      # prints "<     a>"
                                      printf "<%*s>", 6, "a";   # prints "<     a>"
                                      printf "<%*2$s>", "a", 6; # prints "<     a>"
                                      printf "<%2s>", "long";   # prints "<long>" (does not truncate)
                    
                                    If a field width obtained through "*" is negative, it has
                                    the same effect as the "-" flag: left-justification.
                    

                    So wie Du das verwendest ist es nicht dokumentiert.

                    1. Hallo pl,

                      Nein, auch in Perl geht

                      printf '%2$s %1$s', "Welt", "Hallo";
                      
                      # Hallo Welt
                      

                      Das ist aber nicht die eigentliche Zweckbestimmung dieser Schablone.
                      So wie Du das verwendest ist es nicht dokumentiert.

                      Nicht? Dort: format parameter index

                      Bis demnächst
                      Matthias

                      --
                      Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
                      1. Hallo pl,

                        Nein, auch in Perl geht

                        printf '%2$s %1$s', "Welt", "Hallo";
                        
                        # Hallo Welt
                        

                        Das ist aber nicht die eigentliche Zweckbestimmung dieser Schablone.
                        So wie Du das verwendest ist es nicht dokumentiert.

                        Nicht? Dort: format parameter index

                        Da steht dasselbe wie ich Dir schon gepostet habe. MfG

                        1. Hallo pl,

                          Nicht? Dort: format parameter index

                          Da steht dasselbe wie ich Dir schon gepostet habe. MfG

                          Nein.

                          format parameter index
                          
                          An explicit format parameter index, such as 2$. By default sprintf will format the next unused argument in the list, but this allows you to take the arguments out of order, e.g.:
                          
                                printf '%2$d %1$d', 12, 34;      # prints "34 12"
                                printf '%3$d %d %1$d', 1, 2, 3;  # prints "3 1 1"
                          

                          Beachte die beiden Beispiele.

                          LG,
                          CK

                          1. format parameter index
                            
                            An explicit format parameter index, such as 2$. By default sprintf will format the next unused argument in the list, but this allows you to take the arguments out of order, e.g.:
                            
                                  printf '%2$d %1$d', 12, 34;      # prints "34 12"
                                  printf '%3$d %d %1$d', 1, 2, 3;  # prints "3 1 1"
                            

                            Beachte die beiden Beispiele.

                            Eine praktische Bedeutung kann ich auch hier nicht erkennen. Weder bei einem kleinen, nur wenige Zeilen umfassenden Template noch bei größeren, sich über mehrere Seiten erstreckende Templates. Wie ich bereits weiter oben festgestellt habe, die Reihenfolge löst das Problem nicht, ein Index ist kein Ersatz für einen Namen. Einige CPAN-Autoren haben sich übrigens ebenfalls diesem Thema gewidmet, siehe also dort.

                            MfG

                            1. @@pl

                              Eine praktische Bedeutung kann ich auch hier nicht erkennen.

                              Aber vielleicht dort (wo ich schon drauf verwies)?

                              LLAP 🖖

                              --
                              „Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.“ —Johann Wolfgang von Goethe
                              1. hi Gunnar,

                                Eine praktische Bedeutung kann ich auch hier nicht erkennen.

                                Aber vielleicht dort (wo ich schon drauf verwies)?

                                Das Entwickeln einer TE ist immer eine praktische Frage. MB möchte sowas entwickeln um zu verstehen. Ergo ist Entwicklung ein begehbarer und auch legitimer Weg auf der Reise zu eigenen Erkenntnissen. Da gehts gar nicht darum ob es bestimmte Dinge schon gibt wie z.B. das Fahrrad.

                                Am Ende dieser Reise ist es sehr oft so, dass Entwickler zusammenfinden und ein gegenseitiges Verständnis dafür entwickeln warum sie bestimmte Dinge so gelöst haben und nicht anders. Gerade in der Liga der TE-Entwickler wird sowas deutlich dadurch, dass sich eben bestimmte immer wiederkehrende Datenstrukturen durchgesetzt haben. Man kann dafür auch sagen: Es gibt einen gemeinsamen Nenner.

                                Manchmal ist es aber auch so, dass sich auf der Reise nach neuen Erkenntnissen auch neue Wege ergeben. Ja, sehr oft ist es gar so, dass niemand abschätzen kann, welche praktischen Vorteile sich ergeben am Ende eines neuen Weges und auch der Wanderer kann das manchmal gar nicht sagen oder abschätzen was ihn am Ziel erwartet. Er wird trotzdem dahin marschieren, egal ob das Tausende vor ihm schon gemacht haben oder noch Keiner.

                                Und das Schönste was einem Entwickler passieren kann ist: Dass es nicht nur so funktioniert wie er sich das vorgestellt hat sondern dass sich aus eigenen Ergenntnissen neue Wege mit neuen Zielen ergeben.

                                MfG

          2. hi MB,

            Ich bin wie gesagt dabei Template Engines zu entwerfen und in TypeScript aus zu programierern und in meine SPA zu integrieren. Allein zum Zwecke des Lernens.

            Beim Arbeiten mit Templates ergibt sich für JS ein Stil der bisher native CGI-Anwendungen vorbehalten war:

            1. Beim Laden der Seite wird das Template mit Startwerten gerendert ins DOM gesetzt,
            2. Mit der Formularvearbeitung werden Eingaben und Ergebnis übers Template gerendert und das danach ins DOM gepflanzt.

            Das bischen Code sieht dann z.B. so aus entsprechend der beiden Zustände welche die Anwendung annehmen kann:

            function calc(){
                $('#out').html( xr($('#tt').html(),{
                    result:  100 * $('#tanke').val() / $('#strecke').val(),
                    tanke:   $('#tanke').val(),
                    strecke: $('#strecke').val()
                }));
            }
            
            $(document).ready(function(){
                $('#out').html( xr($('#tt').html(),{
                    tanke:   25.4,
                    strecke: 485.6
                }));
            });
            

            Wäre noch die Frage zu klären, wo das Template herkommt, das Beispiel obenstehend bezieht sein Template über $('#tt').html(), d.h., es ist im Dokument selbst notiert. Eingebaut wird es nach dem Rendern beispielsweise in ein <div> mit der id="out". MfG

            1. hi MB,

              Das bischen Code sieht dann z.B. so aus entsprechend der beiden Zustände welche die Anwendung annehmen kann:

              function calc(){
                  $('#out').html( xr($('#tt').html(),{
                      result:  100 * $('#tanke').val() / $('#strecke').val(),
                      tanke:   $('#tanke').val(),
                      strecke: $('#strecke').val()
                  }));
              }
              
              $(document).ready(function(){
                  $('#out').html( xr($('#tt').html(),{
                      tanke:   25.4,
                      strecke: 485.6
                  }));
              });
              

              Genau hier zeigt sich aber auch eines der Probleme einer SPA: Während anhand einer serverseitigen Parameter-Kontrollstuktur:

              if( param('calc')   ){}
              elsif( param('foo') ){}
              elsif( param('bar') ){}
              else{ die "Unbekannter Parameter" }
              

              dem Entwickler sofort sichtbar ist welcher URI bzw. Parameter welchen Zustand abbildet, ist das im JS einer SPA nicht selbstredend weil sich alles unter einunddemselben URI abspielt. Hier bin ich auch noch am Überlegen, wie man mehr Pflegeleichtigkeit ins JS kriegt, eine befriedigende Lösung hab ich jedoch noch nicht gefunden. Auf jeden Fall ist der Einsatz einer TE zum Entwickeln einer SPA ein wichtiger Schritt.

              MfG

              1. @@pl

                dem Entwickler sofort sichtbar ist welcher URI bzw. Parameter welchen Zustand abbildet, ist das im JS einer SPA nicht selbstredend weil sich alles unter einunddemselben URI abspielt.

                Auch eine SPA kann die Zustandsänderung („Seiten“wechsel) über das History-API im URI abbilden. Sollte sie auch, damit Bookmarken und Back-Button wie gewohnt funktionieren.

                LLAP 🖖

                --
                „Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.“ —Johann Wolfgang von Goethe
                1. hi Gunnar

                  dem Entwickler sofort sichtbar ist welcher URI bzw. Parameter welchen Zustand abbildet, ist das im JS einer SPA nicht selbstredend weil sich alles unter einunddemselben URI abspielt.

                  Auch eine SPA kann die Zustandsänderung („Seiten“wechsel) über das History-API im URI abbilden. Sollte sie auch, damit Bookmarken und Back-Button wie gewohnt funktionieren.

                  Auch wenn sich der URI nicht ändert? mfg

                  1. Hallo,

                    Auch eine SPA kann die Zustandsänderung („Seiten“wechsel) über das History-API im URI abbilden. Sollte sie auch, damit Bookmarken und Back-Button wie gewohnt funktionieren.

                    Auch wenn sich der URI nicht ändert?

                    schlechte Umsetzung. So nimmst du dem Besucher wesentliche Navigationsinstrumente.

                    Gruß
                    Jürgen

                    1. Hallo,

                      Auch eine SPA kann die Zustandsänderung („Seiten“wechsel) über das History-API im URI abbilden. Sollte sie auch, damit Bookmarken und Back-Button wie gewohnt funktionieren.

                      Auch wenn sich der URI nicht ändert?

                      schlechte Umsetzung. So nimmst du dem Besucher wesentliche Navigationsinstrumente.

                      Es gibt ja auch noch einen dritten Weg: Der URI bleibt und der Besucher bekommt trotzdem seine History.

                      MfG

                      1. Hallo,

                        Auch eine SPA kann die Zustandsänderung („Seiten“wechsel) über das History-API im URI abbilden. Sollte sie auch, damit Bookmarken und Back-Button wie gewohnt funktionieren.

                        Auch wenn sich der URI nicht ändert?

                        schlechte Umsetzung. So nimmst du dem Besucher wesentliche Navigationsinstrumente.

                        Es gibt ja auch noch einen dritten Weg: Der URI bleibt und der Besucher bekommt trotzdem seine History.

                        Bei einem POST zum Beispiel

                        MfG

                  2. @@pl

                    Auch eine SPA kann die Zustandsänderung („Seiten“wechsel) über das History-API im URI abbilden. Sollte sie auch, damit Bookmarken und Back-Button wie gewohnt funktionieren.

                    Auch wenn sich der URI nicht ändert?

                    „Im URI abbilden“ heißt: der URI ändert sich.

                    LLAP 🖖

                    --
                    „Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.“ —Johann Wolfgang von Goethe
                    1. Auch eine SPA kann die Zustandsänderung („Seiten“wechsel) über das History-API im URI abbilden. Sollte sie auch, damit Bookmarken und Back-Button wie gewohnt funktionieren.

                      Auch wenn sich der URI nicht ändert?

                      „Im URI abbilden“ heißt: der URI ändert sich.

                      Relevant für JS ist das erste Argument für history.pushState() und das ist ein vom URI unabhängiges Objekt welches den jeweiligen Zustand der Anwendung representiert. D.h., der Zustand einer Anwendung kann sowohl in einem JS-Object als auch im URI abgebildet werden. Für eine Navigation über history.state ist der URI völlig belanglos. Dennoch habe ich hier beim history.pushState einen virtuellen URI sozusagen mitgeschnitten, so dass der Zustand der Anwendung auch aus der Adressleiste heraus wiederhergestellt werden kann.

                      Gucks Dir mal an ;)

                      PS: Einzig die Templates sind redundant. Siehe Erläuterungen.

        3. z.B. interessiert mich brennend die Funktion eval().

          Das Feuer solltest du ganz schnell löschen. Zu eval() gibt es, in jeglicher auftretender Form, eigentlich nur eines zu sagen: eval() is evil.

          Pauschalaussage ohne Nutzen und ohne Sinn. Eben typisch für dieses Forum.

          Folgende Beiträge verweisen auf diesen Beitrag:

          1. @@pl

            Pauschalaussage ohne Nutzen und ohne Sinn. Eben typisch für dieses Forum.

            Pauschalaussage ohne Nutzen und ohne Sinn. Eben typisch für dieses Forum.

            LLAP 🖖

            --
            „Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.“ —Johann Wolfgang von Goethe
      3. jo ich will nur wisse wo ich die Hintergrund, Informationen einholen kann. z.B. interessiert mich brennend die Funktion eval(). Zu diesem Beispiel Ich brauche schon Fachwissen um zu verstehen wie's funktioniert. Deswegen wende ich mich an euch ...

        perldoc -f eval Beachte, dass eval in Perl auf 2 verschiedene Arten und ganz unterschiedlich verwendet wird, am Wenigsten jedoch um Code in den Hauptspeicher zu bringen bzw. auszuführen. Dennoch mein ganz persönliches und gleichermaßen sehr praktisches Beispiel hierzu:

        D:\>.pl RPC
        Remote CMD auf dem Host
        --attribute, -a: Zeigt Attribut+Value einer Entity in Konfiguration
        --base, -ba: Name der Datenbank für Option --sql
        --binary, -bi: Erzeuge die Konfiguration als Binary
        --cmd, -c: Freies Kommando im aktuellen Verzeichnis
        --dump, -d: Dump Response Object
        --entity, -e: Zeigt Attribute einer Entity in Konfiguration
        --files, -f: Lokale Dateien für Upload
        --head, -he: HEAD Request auf URL
        --host, -ho: rolfrost.de oder rolfrost
        --irc, -i: Chatserver starten
        --request, -r: HTTP Request auf den angegebenen URL oder auf alle URLs
        --sql, -s: SQL Anweisung, erfordert --base
        --urls, -u: Listet URLs in Konfiguration
        
        D:\>.pl RPC -host rolfrost.de -base myweb -sql select version()
        $VAR1 = [
                  {
                    'version()' => '1.2.3'
                  }
                ];
        

        In Fakt bringt der HTTP-Request zum Server:

        1. den Namen der auszuführenden Methode,
        2. Argumente für diese Methode,
        3. den Code als String für diese Methode.

        eval() bringt (3) als Code in den Hauptspeicher. Dassselbe könntest Du erreichen, indem (3) als Datei auf die Platte geschrieben und mit require eingebunden wird was auch mit temp. Dateien funktioniert.

        Natürlich bringt das auch ein paar Sicherheitsrelevante Fragen mit sich.

        MfG

        --
        Wenn Jemand sagt, spring ins Wasser, frag wenigstens warum.
        1. -2 pl 23.12.2016 12:29

          Es ist mir schon öfters aufgefallen: Welche Witzbolde drücken denn hier immer grundlos, oder besser: ohne Begründung auf "Minus"? Ist das irgendwie Volkssport? Gewohnheit? Langeweile? Muksch, weil keinen Nachtisch bekommen?

          Man kann einen Beitrag ja schlecht finden, aber noch schlechter, weil völlig sinnlos, ist es, einen schlechten Beitrag kommentarlos, ohne jedes nachvollziehbare Gegenargument stehen zu lassen. Damit ist niemandem geholfen, nur dem Ego des Minus-Drückers.

          Reicht die Kraft nicht einmal für ein kurzes Gegenargument, kann die vermeintliche Verfehlung so schlimm wohl kaum gewesen sein; dann kann man sie auch ignorieren. Und hat man nicht einmal ein Gegenargument …
          Das Minus-Gedrücke ist nicht mehr als die bequeme Variante von "Ich finde dich scheiße"-Drunterschreiben – genauso nutzlos, genauso überflüssig, vor allem aber einem Forum wie diesem, in dem die sachliche Argumente immer hochgehalten wurden (und nicht das Hingerotze), nicht gerecht werdend.

          Sperr-Abstimmung (3/5)

          Der Beitrag und die folgenden Antworten werden gelöscht. Der angegebene Grund: Der Beitrag ist unkonstruktiv oder provokativ und trägt zu einer Verschlechterung der Stimmung bei.

          1. normalerweise kritisiert man das ordentlich. meistens sind aber die guten mitstreiter bereits so müde immer und immer wieder gleiche feedback gegen lernresistente trollewände zu werfen, deswegen machen sie leider ihrem unmut nur noch luft über das minus.

            ich denke diese community ist leit langem zu tolerant. allerdings denke ich, dass sich viele, wie ich, nach feierabend mit nem bier hinsetzen, und sich genau über diese posts fremdschämen, also quasi ein "eigentlich dürfte das nicht sein, aber wegschauen will ich jetzt auch nicht, weil es belustigt ungemein".

            1. ich denke diese community ist leit langem zu tolerant.

              ich hab eher das Gefühl die entwickeln sich rückständig.

              allerdings denke ich, dass sich viele, wie ich, nach feierabend mit nem bier hinsetzen, und sich genau über diese posts fremdschämen, also quasi ein "eigentlich dürfte das nicht sein, aber wegschauen will ich jetzt auch nicht, weil es belustigt ungemein".

              Genau das ist ein Ausdruck von Rückständigkeit, Ignoranz, Arroganz. Und im Grunde genommen auch nichts Neues, das gabs hier schon immer.

          2. -2 pl 23.12.2016 12:29

            Es ist mir schon öfters aufgefallen: Welche Witzbolde drücken denn hier immer grundlos, oder besser: ohne Begründung auf "Minus"? Ist das irgendwie Volkssport? Gewohnheit? Langeweile? Muksch, weil keinen Nachtisch bekommen?

            Es gibt mehrere Gründe:

            1. die hahm nicht verstanden
            2. die sind neidisch
            3. die haben ein allgemeines Problem mit mir
            4. alles zusammen.

            Meister dedlfix findet, dass er meine Beiträge grundsätzlich kommentieren muss. Das fand ich schon immer idiotisch, die Frage wäre, wem das was bringen soll.

            Man kann einen Beitrag ja schlecht finden, aber noch schlechter, weil völlig sinnlos, ist es, einen schlechten Beitrag

            Hier werden Fragen gstellt und ich antworte. Mit viel Aufwand übrigens, denn für mich ist die Arbeit am PC seit meinem Schlaganfall nicht mehr so einfach wie vorher. In meinen Antworten stecken vor Allem auch Erfahrungen, die viele hier offensichtlich gar nicht gemacht haben.

            1. Tach!

              Meister dedlfix findet, dass er meine Beiträge grundsätzlich kommentieren muss. Das fand ich schon immer idiotisch, die Frage wäre, wem das was bringen soll.

              Vielen Dank für die Blumen. Dass es dir nichts bringt, wenn ich meinen Kommentar unter deine Postings setze, ist mir schon lange klar. Aber ich mach das ja nicht deinetwegen, sondern um den Mitlesern zu zeigen, dass es auch andere Meinungen zu dem Thema gibt, als die deinige.

              dedlfix.

            2. Hallo pl,

              Es gibt mehrere Gründe:

              1. die hahm nicht verstanden
              2. die sind neidisch
              3. die haben ein allgemeines Problem mit mir
              4. alles zusammen.

              Ich weiß, dass ich nicht der geborene Softwareentwickler bin, denke aber jedoch, dass ich auf einigen Gebieten die grundlegendsten Grundlagen verstanden habe. Und ich bemühe mich wirklich zu verstehen, was du schreibst. Leider gelingt mir das häufig nicht und der Anteil deiner Antworten, bei denen mir das nicht gelingt, steigt.[1] Deshalb bin ich mir fast sicher, dass auch für den Fragesteller deine Antwort nicht hilfreich ist.

              Meister dedlfix findet, dass er meine Beiträge grundsätzlich kommentieren muss. Das fand ich schon immer idiotisch, die Frage wäre, wem das was bringen soll.

              Dem Fragesteller - wem sonst?

              Wenn wir uns mal auf das Fachliche beschränken: Vielleicht solltest du dich bemühen, deine Antworten so zu formulieren, dass sie auch tatsächlich zur Frage passen und für den Fragesteller einen Gewinn darstellen. Dazu musst man sich bemühen, zu verstehen, wie der Fragesteller denken könnte.

              Ich war an der (inhaltlichen) Entwicklung einer online-Lernplattform für Mathematik der Sekundarstufe 1 maßgeblich beteiligt. Da geht es vor allem darum fehlerhafte Antworten daraufhin zu analysieren, was im Kopf des Schülers falsch gelaufen sein könnte und ihm eine hilfreiche Antwort zu geben. Es geht also nicht nur darum zu sagen, dass die Antwort falsch ist, sondern wie der Schüler zu dieser falschen Antwort gekommen sein könnte.

              Dieses Bemühen vermisse ich bei deinen Antworten total.

              Matthias

              --
              Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.

              1. Deshalb bekommst du von mir nur in den seltensten Fällen negative Bewertungen, weil es mir eben häufig nicht gelingt, deine Antworten zu verstehen und ich mir auch nicht die Mühe machen möchte, sie zu verstehen und ich deshalb auch gar nicht entscheiden kann, ob sie richtig oder falsch ist. Für hilfreich halte ich sie oft nicht. ↩︎

              1. Ich war an der (inhaltlichen) Entwicklung einer online-Lernplattform für Mathematik der Sekundarstufe 1 maßgeblich beteiligt. Da geht es vor allem darum fehlerhafte Antworten daraufhin zu analysieren, was im Kopf des Schülers falsch gelaufen sein könnte und ihm eine hilfreiche Antwort zu geben. Es geht also nicht nur darum zu sagen, dass die Antwort falsch ist, sondern wie der Schüler zu dieser falschen Antwort gekommen sein könnte.

                So sollte es sein.

                Dieses Bemühen vermisse ich bei deinen Antworten total.

                Und das Fehlen dieses Bemühens dürfen sich auch die Minus-ohne-Kommentar-Drücker ans Revers heften. Die sind, so gesehen, nicht besser als pl.

                1. Tach!

                  Dieses Bemühen vermisse ich bei deinen Antworten total.

                  Und das Fehlen dieses Bemühens dürfen sich auch die Minus-ohne-Kommentar-Drücker ans Revers heften. Die sind, so gesehen, nicht besser als pl.

                  Dieses Bemühen fehlt ganz und gar nicht. Es gibt unzählige Versuche, mit pl über seine teilweise seltsamen Ansichten und ungewöhnlichen Begriffsverwendungen und über seine Antworten auf OPs ins Gespräch zu kommen. Sie fruchten nur nicht und konkrete Fragen bleiben oftmals unbeantwortet oder werden mit weiteren Nebelkerzen beantwortet. Es ist eher Resignation, wenn man nicht mit Worten antwortet. Versuch es doch bitte einmal selbst, anstatt uns nur Vorhaltungen zu einem Thema zu machen, das für die meisten Stammposter hier bei weitem keine Neuigkeit ist.

                  dedlfix.

                  1. Und das Fehlen dieses Bemühens dürfen sich auch die Minus-ohne-Kommentar-Drücker ans Revers heften. Die sind, so gesehen, nicht besser als pl.

                    Dieses Bemühen fehlt ganz und gar nicht. Es gibt unzählige Versuche, mit pl über seine teilweise seltsamen Ansichten und ungewöhnlichen Begriffsverwendungen und über seine Antworten auf OPs ins Gespräch zu kommen. Sie fruchten nur nicht und konkrete Fragen bleiben oftmals unbeantwortet oder werden mit weiteren Nebelkerzen beantwortet.

                    Bei deinem Versuch, pl zu belehren, vergisst du offenbar den Fragestellenden. Letzterem sollte doch das Bemühen gelten oder meinst du nicht?

                    Jetzt mal unabhängig von deinem tatsächlichen, persönlichen Minus-Frage-Antwort-Verhältnis, das ich nicht kenne, ich kritisiere auch nicht dich persönlich und/oder alleine:

                    Stelle ich eine Frage und jemand gibt eine (tatsächlich oder vermeintlich) verquere Antwort, was hilft es mir, wenn du erfolglos und vor allem an mir vorbei mit dem Antwortenden ins Gespräch zu kommen versuchst? Wieso sagst du mir nicht einfach, was deiner Meinung nach an der Antwort falsch ist?

                    Ist er bekanntermaßen beratungsresistent, kommt er nur mit Nebelkerzen, dann ist das halt so, aber lasst mich als ursprünglich Hilfesuchende nicht mit einer falschen Antwort, einer Frage an den Antwortenden, die für mich ebenso nebulös ist, weil ich deren Zielrichtung nicht verstehe, und der Nebelkerze stehen. Oder, noch schlimmer, mit einem kommentarlosen Minus.

            3. Meister dedlfix findet, dass er meine Beiträge grundsätzlich kommentieren muss.

              Nun, er sagt ja wenigstens, was er anders sieht. Das ist zumindest insofern hilfreich, als dass der Fragende dann halt zwei Meinungen zum Thema hat, mit denen er sich beschäftigen kann. Ein einsames -1 hingegen sagt mir ganz genau: gar nichts. Ich als Fragende kann daran nicht erkennen, was an der Antwort denn ein Problem sein soll, was ich besser machen könnte.

              Genau genommen ist das sogar noch ein Tritt gegen mich. Mit einem kommentarlosen Minus stellt sich jemand hin und sagt, "Das ist die falsche Antwort, aber die richtige verrate ich nicht!". Was soll das?

              Hier werden Fragen gstellt und ich antworte. Mit viel Aufwand übrigens, denn für mich ist die Arbeit am PC seit meinem Schlaganfall nicht mehr so einfach wie vorher. In meinen Antworten stecken vor Allem auch Erfahrungen, die viele hier offensichtlich gar nicht gemacht haben.

              Ich wollte mit meiner Anmerkung deine Antworten, geschweige denn die Mühe, die du dir offensichtlich gibst (ob's in die falsche Richtung geht, ist eine andere Frage), nicht pauschal abwerten. Hier geht's mir nur um das nutzlose Minus.

              1. Tach!

                Nun, er sagt ja wenigstens, was er anders sieht. Das ist zumindest insofern hilfreich, als dass der Fragende dann halt zwei Meinungen zum Thema hat, mit denen er sich beschäftigen kann. Ein einsames -1 hingegen sagt mir ganz genau: gar nichts. Ich als Fragende kann daran nicht erkennen, was an der Antwort denn ein Problem sein soll, was ich besser machen könnte.

                Meist steht ja nicht nur die negativ bewertete Anwort im Raum, sondern nebenan stehen weitere Antworten. Als Fragender darf man ruhig auch mal die "falschen" Antworten probieren, um selbst zu sehen, ob sie nicht doch zielführend sind oder das Minus gerechtfertigt ist. Man kann auch sehr gut aus solchen Fehlern lernen, warum genau das nicht der Weg ist. Und wer sagt denn, dass nicht auch Antworten mit Reputation Fehler enthalten? Oder nicht genau zum Problem passen, weil vielleicht das Problem unzureichend nachvollziehbar beschrieben ist. Die Verantwortung des Prüfens, ob eine Antwort zu einem Problem passt, kann man dem Probleminhaber nicht abnehmen, egal ob Antworten, welcher Qualität auch immer sie sind, kommentiert sind oder nicht.

                dedlfix.

                1. @@dedlfix

                  Und wer sagt denn, dass nicht auch Antworten mit Reputation Fehler enthalten? Oder nicht genau zum Problem passen

                  Eben deshalb hatte ich dieses Posting von @Orlok negativ bewertet (als Ausgleich zur bereits vorhandengewesenen positiven Bewertung).

                  Die Erklärung zu JavaScript war zwar korrekt, ging aber überhaupt nicht auf die Problematik der Verwendung von click-Eventhandlern für irgendwelche Elemente ein. Insofern passte das Posting nicht zum Problem. (Das Folgeposting schon.)

                  LLAP 🖖

                  --
                  „Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.“ —Johann Wolfgang von Goethe
              2. @@Die schlaue Regina

                Ein einsames -1 hingegen sagt mir ganz genau: gar nichts. Ich als Fragende kann daran nicht erkennen, was an der Antwort denn ein Problem sein soll, was ich besser machen könnte.

                Ein nicht so einsames −3 oder gar −5 hingegen sagt dir schon, welchem Stellenwert die Antwort beizumessen ist, auch wenn dir als Fragendem die Gründe verborgen bleiben mögen.

                Genau genommen ist das sogar noch ein Tritt gegen mich. Mit einem kommentarlosen Minus stellt sich jemand hin und sagt, "Das ist die falsche Antwort, aber die richtige verrate ich nicht!". Was soll das?

                Du kannst es den Bewertern nicht verübeln, wenn sie dieselbe Diskussion nicht wieder und wieder führen möchten. Oder das schon würden, aber gerade keine Zeit dazu haben. Für den Fragenden ist es aber schon hilfreich, nicht zielführende Antworten als solche zu kennzeichnen.

                Oft finden sich zielführende Antworten ja anderswo im Thread; das muss nicht als Antwort auf ein negativ bewertetes Posting sein.

                LLAP 🖖

                --
                „Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.“ —Johann Wolfgang von Goethe

                Folgende Beiträge verweisen auf diesen Beitrag:

            4. @@pl

              Es gibt mehrere Gründe:

              1. die hahm nicht verstanden
              2. die sind neidisch
              3. die haben ein allgemeines Problem mit mir
              4. alles zusammen.

              5. du hast nicht verstanden
              6. 5. und 3. zusammen
              7. …

              Meister dedlfix findet, dass er meine Beiträge grundsätzlich kommentieren muss. Das fand ich schon immer idiotisch, die Frage wäre, wem das was bringen soll.

              Man kann einen Beitrag ja schlecht finden, aber noch schlechter, weil völlig sinnlos, ist es, einen schlechten Beitrag

              Der vollständige Satz war:

              Man kann einen Beitrag ja schlecht finden, aber noch schlechter, weil völlig sinnlos, ist es, einen schlechten Beitrag kommentarlos, ohne jedes nachvollziehbare Gegenargument stehen zu lassen. Damit ist niemandem geholfen, nur dem Ego des Minus-Drückers.

              Und darauf zu antworten, dass du es idiotisch findest, dass jemand deine Beiträge kommentiert, ist schon seltsam.

              In meinen Antworten stecken vor Allem auch Erfahrungen, die viele hier offensichtlich gar nicht gemacht haben.

              Es wäre allen (incl. dir) geholfen, wenn du nicht ständig die Qualifikation der anderen infragestellen würdest.

              LLAP 🖖

              --
              „Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.“ —Johann Wolfgang von Goethe
            5. nabend pl,

              [...]. Mit viel Aufwand übrigens, denn für mich ist die Arbeit am PC seit meinem Schlaganfall nicht mehr so einfach wie vorher. [...]

              geteiltes leid ;). Frohe Weihnacht

              vlg MB

  2. Wenns um Transpiler geht, wirst Du da sicher selber fündig. Freilich ist es möglich, mit einer PL-A über ein Template den Code für PL-B zu generieren und mit eval() zu kompilieren bzw. auszuführen.

    Aber warum unbedingt eval, guck mal hier:

    xhr.open('GET', xr('@self@?rm=@url@',{
       self:'%url%',
       url: encodeURI(url)
    }));
    

    Auf den ersten Blick nicht gleich sichtbar, mit dieser Zeile handelt es sich um ein PL (Programming Lang) übergreifendes Template. So ist %url% ein Platzhalter, der noch vor dem Ausliefern der Seite serverseitig mit einer Perl-TE gerendert wird. D.h., der gesamte Body ist dafür das Template.

    '@self@?rm=@url@' hingegen ist das Template für eine JavaScript-TE. Wenn Letztere zuschlägt, steht in %url% bereits derjenige URL drin der über den nächsten Platzhalter @self@ gerendert wird und schließlich für den XHR-Request verbindlich ist.

    Im Prinzip ein kleines Beispiel für transpile: Eine Perl-Variable findet über den Umweg einer TE in JS Verwendung. MfG

    1. Im Prinzip ein kleines Beispiel für transpile: Eine Perl-Variable findet über den Umweg einer TE in JS Verwendung. MfG

      Das Einbringen serverseitiger (Perl, PHP) Variablen in JS ist jedoch eine Anforderung die öfter vorkommt und auch hier im Forum des Öfteren diskutiert wurde. Um noch ein Beispiel hierzu zu zeigen, so stehts im Template:

      <script>var SID = "%sid%"; </script>
      

      und so <script>var SID = "90a94a197d480bece6c5508f5ede8aab"; </script>

      in jeder Seite die ausgeliefert wird. MfG