2017-08-22 1 views
1

Ich baue eine Website mit Spark + Velocity. Dies hat HTML-Komponenten, die auf den Webseiten der Website sehr ähnlich sind. Daher habe ich meine freigegebenen Komponenten in einige Vorlagen eingefügt, die ich dynamisch auf die Seite lade.Verwendung von Apache Velocity (mit SparkJava) mit geladenen Vorlagen

Ihnen ein einfaches Beispiel zu geben, ich habe Seiten wie folgt aus:

anyPage.vm

<head> stuff in here </head> 
<body> 
<div id="header"></div> 
$AJavaObject.ToString() # <-- using the Velocity templating language 
... 
</body> 
<script type="text/javascript"> 
    $(function(){ 
     $("#header").load("header.vm"); 
    } 
</script> 

Das funktioniert alles in Ordnung, bis auf die Tatsache, dass die Geschwindigkeit Code in header.vm gewonnen arbeite nicht.

header.vm

<h1>Header</h1> 
$AnotherJavaObject.toString() 

Die header.vm enthält keine <head> oder <body> Tagging.

Beim Rendern der Seite, sehe ich anstelle der String-Darstellung der AnotherJavaObject die tatsächliche Zeichenfolge $AnotherJavaObject.toString().

Jede Hilfe wird geschätzt. Vielen Dank.

Antwort

1

Sie können es nicht in JavaScript laden, nachdem die Ergebnisse der Vorlage zurückgegeben wurden. die Ergebnisse anzeigen/ausblenden

#parse("header.vm") 

Und wenn Sie es JavaScript muss verstecken verwenden: Sie sollten sehen, Velocity Loading resources verwenden parsen.

1

GELÖST

Für alle das gleiche Problem konfrontiert, ist die Lösung in der Velocity Template Engine selbst: http://velocity.apache.org/engine/1.7/user-guide.html#parse

Statt load() auf die Komponente mit dem Header ID des Anrufers, die Sie gerade benötigen

#parse("header.vm") 

haben, wo Sie die header.vm wollen gerendert werden.

sollten Sie verwenden die #include Richtlinie wie statische, nicht-Velocity-Vorlagen zu laden:

#include("other.html") 

Dies ist jedoch nicht so einfach ist. Die Dokumentation besagt, dass #parse und #include nur Ressourcen aus dem TEMPLATE_ROOT laden können. Ich konnte jedoch nicht herausfinden, was diese Wurzel ist. Bei der Initialisierung der Velocity Engine musste ich also dafür sorgen, dass relative Pfade akzeptiert wurden:

Verwandte Themen