2014-09-29 18 views
14

I have published all my code as a runnable that uses express for loading static contentUnbekannte Vorlage Objektfehler mit Lenker 2.0 Runtime

ich vorkompilierte haben diese Lenker Vorlage:

<img src="{{coverImage}}"/> 
<ul> 
    <li>{{title}}</li> 
    <li>{{author}}</li> 
    <li>{{releaseDate}}</li> 
    <li>{{keywords}}</li> 
</ul> 

löschen

ich diese Funktion erhalten haben:

(function() { 
    var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {}; 
templates['bookTemplate'] = template(function (Handlebars,depth0,helpers,partials,data) { 
    this.compilerInfo = [4,'>= 1.0.0']; 
helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; 
    var buffer = "", stack1, helper, functionType="function", escapeExpression=this.escapeExpression; 


    buffer += "<img src=\""; 
    if (helper = helpers.coverImage) { stack1 = helper.call(depth0, {hash:{},data:data}); } 
    else { helper = (depth0 && depth0.coverImage); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; } 
    buffer += escapeExpression(stack1) 
    + "\"/>\r\n <ul>\r\n  <li>"; 
    if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); } 
    else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; } 
    buffer += escapeExpression(stack1) 
    + "</li>\r\n  <li>"; 
    if (helper = helpers.author) { stack1 = helper.call(depth0, {hash:{},data:data}); } 
    else { helper = (depth0 && depth0.author); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; } 
    buffer += escapeExpression(stack1) 
    + "</li>\r\n  <li>"; 
    if (helper = helpers.releaseDate) { stack1 = helper.call(depth0, {hash:{},data:data}); } 
    else { helper = (depth0 && depth0.releaseDate); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; } 
    buffer += escapeExpression(stack1) 
    + "</li>\r\n  <li>"; 
    if (helper = helpers.keywords) { stack1 = helper.call(depth0, {hash:{},data:data}); } 
    else { helper = (depth0 && depth0.keywords); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; } 
    buffer += escapeExpression(stack1) 
    + "</li>\r\n </ul>\r\n<button class=\"delete\">Delete</button>"; 
    return buffer; 
    }); 
})(); 

Ich habe die Skripte wie folgt hinzugefügt:

<script src="js/lib/handlebars.runtime-v2.0.0.js"></script> 
<script src="js/templates.js"></script> 

Ich sehe in Chrome Dev Tools, dass beide Skripte laden.

aber wenn ich es so:

//inside a Backbone view 
template:Handlebars.templates.bookTemplate 

ich diesen Fehler:

Uncaught Error: Unknown template object: function handlebars.runtime-v2.0.0.js:455template handlebars.runtime-v2.0.0.js:455hb.template handlebars.runtime-v2.0.0.js:644(anonymous function) templates.js:3(anonymous function) 

ich diesen Fehler in Zeile 455 in handlebars runtime @2.0.0 in der Funktion template, auf ein wenig Debugging tun ich finde, dass templateSpec eine Funktion ist, aber templateSpec.main ist undefined:

//this function makes a call to templates['bookTemplate'] = template(function (Handlebars,depth0,helpers,partials,data) {...} in the `bookTemplate.js` 
    function template(templateSpec, env) { 
/* istanbul ignore next */ 
if (!env) { 
    throw new Exception("No environment passed to template"); 
} 
//error occurs here: 
if (!templateSpec || !templateSpec.main) { 
    throw new Exception('Unkn own template object: ' + typeof templateSpec); 
} 
... 

Zusätzlich finde ich, dass Lenker.templates ein leeres Objekt ist.

Was geht hier vor?

+1

Alles, was in [hier] (https://github.com/leshill/handlebars_assets/issues/110) bekannt vor? Wie wäre es mit den anderen [Google Hits] (https://www.google.ca/#q=handlebars+Uncaught+Error%3A+Unknown+template+object). –

+0

@muistooshort ich die Browser-Cache in Chrome deaktivieren, sind die Google-Treffer zu komplex, was Im einfach zu tun ist, im einen Lenker Vorlage Vorkompilieren und es mit der Laufzeitbibliothek, kein Server noch verwendet wird, mit 'file: //', aktualisierten der Beitrag zum Anzeigen der Fehlerstelle – vamsiampolu

+0

@muistooshort die 'templateSpec.main' ist' undefined' – vamsiampolu

Antwort

7

Wenn Sie diese Vorlage mit Lenker 1.3.x vorkompilierte, Sie laufen in eine unterbrechende Änderung mit 2,0. Stellen Sie sicher, dass die Server/Build-Tools den 2.0-Lenker-Compiler ausführen.

+0

können Sie auch hinzufügen, dass 'Lenker' NPM-Modul global installiert werden muss – vamsiampolu

+1

Allgemein gesagt, das ist keine harte und schnelle Anforderung. Wenn Sie ein js-Build-System verwenden, hat es es in der Regel nur als eine Anforderung irgendwo in seiner Hierarchie. Selbst wenn Sie ein Makefile in Ihrem Projekt verwenden, können Sie einfach auf "node_modules/.bin/lenker" verweisen, anstatt sich auf eine globale Installation zu verlassen. Wenn Sie ein npm-Skript verwenden, ist es sogar noch einfacher, da Sie auf ausführbare Dateien von depenency aus dem Abschnitt _package.json "scripts" verweisen können, ohne den Pfad in node_modules anzugeben. – jwilm

+0

@vamsiampolu Das "Lenker" -Npm-Modul muss nicht installiert werden. Sie müssen die Komponente für die Lenkerkarosserie nicht einmal explizit installieren. – ohcibi

0

Sind Sie sicher, dass Sie die Vorlage mit der gleichen Lenker Version wie die Laufzeit kompiliert?

Ich versuche nur Lenker 2.0, und meine kompilierten Templates haben [6,'>= 2.0.0'] im Compiler Feld. Ihre kompilierte Vorlage schlägt vor, dass sie mit Lenker 1.x zusammengestellt wurde.

+0

handlebars' Ich sehe nicht, warum Sie meine Antwort gelöscht, wie: 1/Es war richtig (siehe akzeptierte Antwort) 2/Ich kann nicht auf Beiträge kommentieren das sind sowieso nicht meine. – Benito

Verwandte Themen