0

ハンドルバーで部分式を使用しようとしていますが、最も単純な式でも「options.fn は関数ではありません」というエラーが発生します。https://github.com/assemble/handlebars-helpersから追加のヘルパーを使用している間、この式は正常に機能します。

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

しかし、このような部分式を作成すると

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

またはこれ

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

ライブラリがエラーをスローします

TypeError: [feed.hbs] options.fn は
   Object.helpers.gt (/Users/me/Projects/jackal/node_modules/handlebars-helpers/lib/comparison.js:152:20)
   の Object.evalの関数ではありません(createFunctionContext で評価 ...

2 つの条件を確認する必要があります。現時点では、ネストされた式で達成されました:

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

では、私の部分式の何が問題なのですか?

4

1 に答える 1

1

私には、部分式 がそのようにサポートされていないように見えhandlebars-helpersます。

デバッガーでコードを少し見てみました。と自体は正しく呼び出されますが、ヘルパーのコード{{#and (gt 4 3) (gt 5 4)}}OK{{/and}}は次のとおりです。(gt 4 3)gt

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);
};

しかし、部分式にはfn(if ブロック) もinverse(else ブロック)もないためhandlebars-helpers、この時点で失敗します。

あなたの表現をサポートするには、handlebars-helpers必要性-IMHO-コードを次のように書き換えます。

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;
  }
};

したがって、今のところ、 で部分式を使用することはできませんhandlebars-helpers

github ページに問題を追加しました:ハンドルバー部分式のサポート

于 2016-08-21T07:40:25.240 に答える