2013-03-26 4 views
9

Prima di tutto, mi piace molto Dart e continuo a provare a utilizzarlo in progetti reali, ma poi ho riscontrato problemi come questo in cui ogni altro framework web ha una soluzione ovvia ma non riesco a capire come farlo funzionare Dardo.Come posso creare un modello sul lato server in Dart dove posso impostare un diverso <title/> per ogni pagina?

Il problema è che mi piacerebbe rendere più pagine utilizzando un unico modello base in cui posso impostare il titolo della pagina sul server e quindi servire la pagina al browser.

Qualcosa di semplice come questo:

<!DOCTYPE html> 
<html> 
<head> 
    <title>{{ custom_title }}</title> 
</head> 
<body> 
    {{ page_content }} 
    <footer>Hey, Seth Ladd!</footer> 
</body> 
</html> 

Dove Vorrei quindi passare i variabili di modello che sostituirebbero {{ custom_title }} e {{ page_content }} prima di essere inviati al browser. Una soluzione di questo tipo esiste ovunque nelle librerie core di dart?

Ho guardato il materiale Web Components/Web UI, ma sembra che non sia possibile avere componenti che vivono al di fuori del tag <body>. Potrei anche alterarlo facilmente dal lato client, ma è un po 'più sporco di soluzione e solleva alcune preoccupazioni SEO (dal momento che il titolo è un indicatore così importante del contenuto della pagina).

risposta

12

Prova mustache, un'implementazione Dart di mustache templates, una sintassi di templatura ampiamente utilizzata, con implementazioni in un certo numero di lingue.

Ecco un esempio:

import 'package:mustache/mustache.dart'; 

main() { 
    var source = '{{#names}}<div>{{lastname}}, {{firstname}}</div>{{/names}}'; 
    var template = new Template(source); 
    var output = template.renderString({'names': [ 
     {'firstname': 'Greg', 'lastname': 'Lowe'}, 
     {'firstname': 'Bob', 'lastname': 'Johnson'} 
    ]}); 
    print(output); 
} 

Il team Dart è attualmente focalizzata sullo sviluppo lato client, così tante caratteristiche di base sul lato server sono mancanti nelle librerie di base. Comunque dai uno sguardo allo pub, ci sono un certo numero di pacchetti gestiti dalla comunità disponibili.

Vedere anche questo pacchetto simile: mustache4dart.