Come posso collegare una strategia per gestire gli attributi mancanti quando si utilizzano i modelli di baffi

StackOverflow https://stackoverflow.com/questions/8978779

  •  12-11-2019
  •  | 
  •  

Domanda

Sto usando i baffi per rendere materiale sul server, ma anche sul client. La strategia è che ho un'app per una sola pagina (resa con i baffi sul server) e questo modello estrae frammenti dal server e li utilizza per rendere JSON anche sul client.

Ora il problema è con i modelli. Voglio rendere le etichette sul server, ma lasciare un po 'di sintassi dei baffi in atto da rendere sul client. Diciamo che ho un modello come questo:

<html>
<head><title>{{label.title}}</title></head>
<body>
    <h1>{{name}}</h1>
    <p>{{description}}</p>
</body>
</html>

Il rendering lato server compilerà l'etichetta, ma ora rimuove anche i segnaposto che non sono visibili nel contesto.

<html>
<head><title>Ze zjerman title</title></head>
<body>
    <h1></h1>
    <p></p>
</body>
</html>

C'è un modo per collegarsi in scala ed evitarlo? Ho cercato ingenuamente di cavartela:

templateEngine.layout(path, Map(attributes:_*).withDefault((key)=>"{{"+key+"}}"))

... ma ovviamente questo verrà scartato non appena la mappa verrà elaborata attraverso un ciclo (ad es. nella linea del TemplateEngine 576). Dov'è il punto di spina corretto per questo?

Ho anche trovato il non residuo e il nullstring Rendercontext, ma penso di non poter rendere il rendering che l'output è una chiave lì, dal momento che queste variabili sono solo stringhe ...

Sto usando Scalatra-scalato 2.0.2 e Scala 2.9.0-1.

È stato utile?

Soluzione

È possibile utilizzare un delimitatore alternativo per i dati che sai essere il lato del client popolato. Vedere: Imposta delimetro

Modello lato server:

<h1>{{title}}</h1>
<p> [[ client.name ]] - [[ client.description ]] </p>

Dati lato server:

{title : "Hello"}

Prepara il tuo delimitatore alternativo al modello di server rendering e quindi rendering il lato client.

var client_template = "{{=[[ ]]=}}" + server_rendered,
client_data = { client : { name : "Max", description : "world"}},
client_rendered = Mustache.render(client_template, client_data);

ho fatto un jsfiddle funzionante per mostrarlo funzionante. Dai un'occhiata a Console.log per vedere il modello del server prima e dopo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top