2016-08-21 2 views
0

Ich versuche, Teilausdruck in Lenker zu verwenden, aber Fehler "options.fn ist keine Funktion" sogar auf einfachste Ausdruck. Bei der Verwendung von zusätzlichen Helfer aus https://github.com/assemble/handlebars-helpers, arbeitet dieser Ausdruck fein:Lenker Teilausdruck wirft "options.fn ist keine Funktion" Fehler

{{#and true true}}OK{{/and}} 

Aber wenn ich eine subexpression wie diese

{{#and (gt 4 3) (gt 5 4)}}OK{{/and}} 

Oder diese

{{#and (gt 4 3) true}}OK{{/and}} 

Die Bibliothek machen wirft einen Fehler

TypeError: [feed.hbs] options.fn is not a function
   at Object.helpers.gt (/Users/me/Projects/jackal/node_modules/handlebars-helpers/lib/comparison.js:152:20)
   at Object.eval (eval at createFunctionContext ...

Ich muss eine Überprüfung für zwei Bedingungen haben. Zu dieser Zeit erreichte es mit verschachtelten Ausdrücken:

{{#gt 4 3}} 
    {{#gt 5 4}} 
     ok 
    {{/gt}} 
{{/gt}} 

Also was ist falsch mit meinen Teilausdrücken?

+0

In der Dokumentation von [ 'Lenker-helpers'] (https://github.com/assemble/handlebars-helpers), kann ich nicht sehen, dass Sie erwähnen Teilausdrücke überall. Wo hast du gesehen, dass du Teilausdrücke verwenden kannst? –

+0

http://handlebarsjs.com/expressions.html hier – tonghae

+0

Ich habe ein Problem erstellt, das auf Ihre Frage verweist. –

Antwort

0

Für mich sieht es so aus Unterausdrücke werden nicht von handlebars-helpers so unterstützt.

Ich hatte einen kurzen Blick auf den Code mit dem Debugger. Für die {{#and (gt 4 3) (gt 5 4)}}OK{{/and}} und die (gt 4 3) selbst korrekt genannt wird, aber der Code des gt Helfers ist:

helpers.gt = function(a, b, options) { 
    if (arguments.length === 2) { 
    options = b; 
    b = options.hash.compare; 
    } 
    if (a > b) { 
    return options.fn(this); 
    } 
    return options.inverse(this); 
}; 

Aber weil Unterausdrücke tut weder einen fn (wenn Block), noch einen inverse (else-Block), die handlebars-helpers scheitert an diesem Punkt.

Um Ihren Ausdruck der handlebars-helpers Bedarf zu stützen - IMHO - umschreiben ihren Code so etwas wie das:

helpers.gt = function(a, b, options) { 
    if (arguments.length === 2) { 
    options = b; 
    b = options.hash.compare; 
    } 

    //fn block exists to it is not a subexpression 

    if(options.fn) { 
    if (a > b) { 
     return options.fn(this); 
    } 
    return options.inverse(this); 
    } else { 
    return a > b; 
    } 
}; 

So jetzt können Sie nicht mit Unterausdrücke handlebars-helpers verwenden.

ich eine Ausgabe auf ihrer Github-Seite hinzugefügt: Supporting Handlebars subexpressions

Verwandte Themen