Enthalten SVG-xml im Jade-Vorlage
Ist es möglich, erstellen Sie eine Jade-mixin, die eine Datei liest aus der Datei-system, und hallt es in der gerenderten HTML?
Habe ich versucht, dieses...
mixin svg(file)
- var fs = require("fs");
- var xml = fs.readFileSync(file)
div= xml
... aber es schlägt fehl, da require
existiert nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es gibt zwei Möglichkeiten, dies zu erreichen. Letztere zeigt nur den geraden Weg in den Fall, nicht mit Mixins in Verbindung akzeptabel ist für Sie. Die erste Lösung hüllt Ihr Ansatz:
A: Pass variable
require
oderfs
zu Ihrem jade-VorlageStellen Sie sicher, dass die benötigten Funktionen zur Verfügung stehen (scoped) während die jade-template-parsing. Angenommen, Sie sind mit express-dies könnte etwa so Aussehen:
Nun Ihre mixin sollte die Arbeit mit zwei geringfügigen änderungen:
Können Sie auch einfach
{ require: 'require' }
als ein lokal auf dem jade-Vorlage und verwenden Sie Ihre original-mixin-code. Beachten Sie, dass in jedem Fall haben Sie zu unterdrücken Flucht vor der Ausgabe mit!=
zur übertragung von SVG-markup, so dass es interpretiert und gerendert werden, statt angezeigt als (HTML -) text. Auch bewusst sein, dassfs
Leben in Ihre app/- controller-code und Pfade müssen relativ ausgedrückt, z.B.:B: Oder nutzen Sie einfach sind (ohne Mixins in Verbindung)
Jade ist in der Lage, einschließlich andere Art von Inhalten, so dass eine einfache
übernimmt diese Aufgabe als gut. Leider funktioniert das nicht dynamisch, so dass Sie nicht zählen Dateien mit übergebenen Variablen innerhalb von Mixins in Verbindung. Aber: solange man nicht planen bereichern Sie Ihre mixin mit zusätzlicher Logik, diese Lösung nicht selbst produzieren (viel) mehr code.
!=
im div im Fall B, da Sie die include-Datei innerhalb des div als eine partielle.Oben Antworten funktionieren, aber wenn Sie wollen, um eine SVG-inline. Sie können es so machen.
Habe ich mehr Glück mit
object
wiea.svg(href='/')
object(type="image/svg+xml" data="/img/#{data.menu.img}.svg")
| #{data.menu.title}