2016-07-29 6 views
0

Ich arbeite an einer Node/Express/Lenker-App und ich habe gerade herausgefunden, benutzerdefinierte Helfer, aber ich habe keine Ahnung, wo sie zu definieren.Knoten/Express-Lenker - Wo benutzerdefinierte Helfer zu definieren sind

Ich habe versucht, einige in der aktuellen Ansicht Vorlage hbs-Datei in einem <script> Tag wie so hinzufügen:

<script type="text/javascript"> 
    Handlebars.registerHelper('if', function(conditional, options) { 
     console.log("IN HANDLEBARS HELPER"); 
     if (conditional) { 
      return options.fn(this); 
     } else { 
      return options.inverse(this); 
     } 
    }); 
</script> 

Aber ich bekomme einen Uncaught Reference: Lenker ist nicht definiert.

Ich fand auch diese JSFiddle, aber ich habe nichts, das wie dieser Code in meiner App aussieht. Ich habe auch ein Dutzend Tutorials angeschaut, aber sie sagen ziemlich genau dasselbe, was die offizielle Dokumentation tut.

Also, wo muss ich diesen Code genau in die Node/Express-App einbinden?

Wenn jemand etwas Licht auf dieses Problem werfen kann, würde es geschätzt werden.

EDIT: Ich bin nicht sicher, ob dies der richtige Weg ist, aber Sie können es in Ihrem app.js setzen, nachdem Sie die Ansicht-Engine gesetzt haben:

var hbs = require('hbs'); 

hbs.registerHelper('test', function(conditional, options) { 
    //do something 
    if (conditional) { 
    return options.fn(this); 
    } else { 
    return options.inverse(this); 
    } 
}); 

Wenn dies nicht korrekt ist oder aus irgendeinem Grund problematisch, lass es mich wissen.

+0

Wenn Sie es auf der Serverseite rendern, müssen Sie dies auf dem Server festlegen. –

Antwort

1

Ich persönlich erstellen einen Ordner Helfer im Stammverzeichnis und legen Sie alle meine Hilfsmethoden dort. Sie können dann in Ihre app.js anfordern und der hbs-Engine mitteilen, dass Sie diese Datei für Helfer verwenden möchten.

// in app.js 

const hbsHelpers = require('./helpers/handlebars'); 
... 
app.engine('handlebars', exphbs({ 
    helpers: hbsHelpers 
}); 
0

diese Lösung funktioniert für mich.

inside app.js 
below 
app.set('view engine', 'hbs'); 

//example get local date 

var hbs = require('hbs'); 

hbs.registerHelper('dateLocal', function(fecha) { 
    return new Date(fecha).toLocaleDateString(); 
});