Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem Einbindung js-Datei / Pagecache On

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Problem Einbindung js-Datei / Pagecache On

    Ich habe ein komisches Problem was ich mir nicht erklären kann. Ich nutze SmartVisu 2.9 und binde meine js-Dateien mit folgender visu.js-Datei (im /pages/smarthome-Folder liegend ein):

    Code:
    var scriptFolder = (function() {
        var result = document.currentScript.getAttribute("src", 2);
        return result.substring(0, result.lastIndexOf("/") +1);
    }());
    
    function include(script) {
      script = scriptFolder + script;
      $.ajax({
        url: script,
        dataType: "script",
        async: false,
        error: function () {
          alert("Could not load '" + script + "'");
        }
      });
    }
    
    // -----------------------------------------------------------------------------
    // Widgets to include...
    // -----------------------------------------------------------------------------
    include("widget_my.js");
    //include("some_other_here.js");
    // -----------------------------------------------------------------------------
    Das klappt auch wunderbar, wenn der Pagecache off ist. Die Datei widget_my.js liegt dann ebenfalls im 'pages/smarthome'-Ordner.

    Stelle ich nun den Pagecache auf 'On', kommt die Meldung, das Smartvisu 'widget_my.js' nicht laden kann. Im Debugger sehe ich, dass er die Datei aus dem www-root--Pfad laden will, wo sieht natürlich nicht liegt.

    Wo ist hier mein Denkfehler oder handelt es sich um einen Bug?

    Gruss,

    Stefan
    Sonos

    #2
    Es dürfte ein Bug sein. Ich weiss aber nicht, ob ich diesen fixen kann.
    Bei eingeschaltetem Pagecache werden die JS minimiert und zusammengefasst (durch die assets.php im root).
    Dadurch stimmt dein Pfad nicht mehr.

    Ich verstehe aber auch nicht ganz, weshalb du die Scripts auf diese Art lädst, ist doch nicht unbedingt effizient.
    Und async = false ist afaik deprecated.

    Kommentar


      #3
      Kannst du mir ein Tip geben, wie und wo ich eigene JS-Dateien am besten einbinde? Ich stehe noch ein wenig auf Kriegsfuß mit JavaScript, CSS und Konsorten
      Sonos

      Kommentar


        #4
        Du kannst in deinem Template in {% block head %}{% endblock %} Script-Tags einbinden.
        Zu bachten ist aber, dass dies nach der visu.js geladen wird.

        Oder du packst eindach alles in die visu.js.

        Für die Zukunft:
        Es gab die Anregung, dass jedes js und css im Pages Ordner automatisch eingebunden werden könnte. Wäre das sinnvoll für dich?

        Kommentar


          #5
          Ja, letzteres wäre genau das, was ich versucht habe mit dem Snippet zu erreichen. Für mich der modularste Ansatz.
          Problem beim kopieren in die Visu: ich bin ein absoluter Fan von Docker. Ich lasse alles in separaten Container laufen und binde dann persistente Daten ein, z.B. Konfigurationen. Meine Container erstelle ich ab und zu neu, dann werden automatisch aus den ganzen Git Repositories die aktuellsten Repos gezogen, auch Smartvisu. Hier würde dann immer meine Anpassungen an der Visu.js überschrieben.
          Also klarer Vote von mir für eine klare Trennung vom Smartvisu-Kern und benutzerspezifischen Anpassungen.

          Gruss,

          Stefan
          Sonos

          Kommentar


            #6
            smai : wie vorgeschlagen - visu.js + visu.css laden, dann alles aus Unterverzeichnis /js und /css ... den Dreizeiler hatte ich ja neulich irgendwo gequoted ... und Ruhe ist's ...
            /tom
            Zuletzt geändert von Tom Bombadil; 13.02.2017, 01:06.

            Kommentar


              #7
              Verstanden, genau so werde ich es machen.
              Wird in den nächsten Stunden committed.

              pfischi die visu.js bzw. deine Pages sind doch gar nicht im smartVISU Kern und werden damit auch nicht überschrieben.

              Kommentar


                #8
                So, ist drin. Waren dann aber doch etwas mehr als 3 Zeilen (v.A. für die Prüfung, ob der Ordner existiert).

                Kommentar


                  #9
                  Cool, Danke. Teste ich gleich heute Abend.

                  Gruss,

                  Stefan
                  Sonos

                  Kommentar

                  Lädt...
                  X