2017-08-19 1 views
-1

Ich möchte statische HTML-Seiten erstellen und den Inhalt an ein Javascript-Objekt binden, ich weiß, dass es ein Plugin namens MetalSmith-Layout gibt, das den Wert von Markdown-Datei an HTML bindet, aber für meinen Fall Da die Bindungswerte dynamisch sind, kann ich keinen statischen Markdown erstellen oder die Markdown-Datei im Brand erstellen.Metalsmith HTML-Vorlagenansicht Modellbindung

Also für meine Frage, gibt es einen besseren Weg, um die Vorlage und JavaScript-Objekt genau wie Express Router zu binden? wie

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('homepage', vm); 
}); 

homepage.swig

<html> 
... 
    <div>{{ firstName }}</div> 
    <div>{{ lastName }}</div> 
... 
</html> 

vm.json

{ 
    "firstName":"Tom", 
    "lastName":"Hansk" 
} 

Antwort

0

Ich habe gerade herausgefunden, dass ich meine Ansicht Modell innerhalb Metadaten hinzufügen können, und alle Seiten-Layout können Greifen Sie auf dieses globale Objekt zu.

var viewModel = 
{     
    firstName: "Tom", 
    lastName: "Hanks" 
}; 

Metalsmith(__dirname)   // __dirname defined by node.js: 
          // name of current working directory 
    .metadata(viewModel) // add any variable you want 
          // use them in layout-files 
    ... 
    .use(layouts({    // wrap layouts around html 
    engine: 'handlebars',  // use the layout engine you like 
    })) 
    ... 

template.html

<html> 
... 
    <div>{{ firstName }}</div> 
    <div>{{ lastName }}</div> 
... 
</html> 

Quelle: https://github.com/segmentio/metalsmith/blob/master/examples/static-site/index.js