2017-05-11 3 views
2

modèles Freemaker rendent les variables avec la syntaxe suivante: $ {name}en utilisant freemarker avec JavaScript ES6 Strings modèle

Javascript chaînes de modèle ES6 ont une syntaxe similaire $ {name}

Le problème est que lorsque se exécute Freemarker sur le serveur, il essayera de rendre les templates dans le code javascript, car Freemarker pense qu'il a rencontré une variable (alors qu'en fait c'est un template javascript qui devrait être rendu sur le client). Recommandation sur la façon de gérer cela?

Une façon est d'envelopper tout le JS dans un commentaire de freemarker (il est donc jamais évalué),

ou mettre le code JS dans un fichier seprate (non inline dans la page html) afin qu'il ne soit jamais évalué par freemarker.

Répondre

1

syntaxe de FreeMarker n'est pas configurable malheureusement (ni la syntaxe du modèle ES6, je suppose). Parce que ce serait la vraie solution, pour le configurer pour utiliser autre chose au lieu de $. Vous pouvez créer une mauvaise mise en œuvre de l'homme de ce avec une coutume TemplateLoader que la mise en œuvre seulement délègue à un autre TemplateLoader, sauf qu'il ajoute un filtre à Reader il retourne, et qu'il modifie le modèle sur la volée. Il remplacerait ${ -s avec $<#-- -->{ et @{ -s avec ${. Alors, votre modèle d'origine peut être quelque chose comme ${forES6} @{forFM}. Cela a un certain nombre d'inconvénients, comme les numéros de colonne dans les positions d'erreur FreeMarker seront déplacés, et le plugin Eclipse et d'autres outils ne fonctionneront pas.

1

vous pouvez utiliser javascripts dans les balises noparse

<#noparse>...</#noparse> 

ou

const name = "WORLD"; 
Hello ${r"${name}"} 

vue html "Bonjour $ {name}" output-> Bonjour tout le monde