3

でレンダリングしたいこのテンプレートがあるとしましょう:

var template = '{{#numbers}}'
             +     '{{#capitalize}}{{percentage}}{{/capitalize}} complete.\n'
             + '{{/numbers}}';

そして、ffでコンパイルします:

var hello = hogan.compile(template);

var rendered = hello.render({
  numbers: [
    { percentage: .3 },
    { percentage: .6 },
    { percentage: .8 }
  ],
  capitalize: function() {
    return function(num) {
      // console.log(num);
      return num * 100;
    }
  }
})

console.log(rendered)

を取得する代わりに、100 を掛けた数値を取得するにはどうすればよいNaNですか?

NaN complete.
NaN complete.
NaN complete.

num = {{percentage}}また、番号自体ではなく、上記の行のコメントを外すと。

4

3 に答える 3

7

@akonsu による応答に基づいて、Hogan.js でラムダの値を取得する方法の例を次に示します。

manualこの例にはとの 2 つのヘルパー関数がありautomatic、目的の動作に応じてラムダ関数の定義をラップできます。

var source = '{{#numbers}}'
           +     'test1 = {{#test1}}{{percentage}}{{/test1}}\n'
           + '{{/numbers}}'
           + '{{#numbers}}'
           +     'test2 = {{#test2}}{{percentage}}{{/test2}}\n'
           + '{{/numbers}}';

var template = Hogan.compile(source);

var renderer = function(context) {
    return function(text) {
        return template.c.compile(text, template.options).render(context);
    };
};

var manual = function(lambda) {
    return function(text) {
        var render = renderer(this);
        return lambda.call(this, text, render);
    };
};

var automatic = function(lambda) {
    return manual(function(text, render) {
        return lambda.call(this, render(text));
    });
};

var rendered = template.render({
    numbers: [
        { percentage: .3 },
        { percentage: .6 },
        { percentage: .8 }
    ],
    test1: manual(function(text, render) {
        return render(text) * 100;
    }),
    test2: automatic(function(num) {
        return num * 100;
    })
});

console.log(rendered);

出力は次のようになります。

test1 = 30
test1 = 60
test1 = 80
test2 = 30
test2 = 60
test2 = 80

これは解決策を示すjsfiddleです:http://jsfiddle.net/potatosalad/h5cU4/2/

このソリューションはパーシャルでは機能しないことに注意してください (ラムダ セクション内から参照されている場合)。

Hogan.js 2.0.0 に関連するコードは、ラムダ置換セクション高次関数です。

于 2013-04-25T00:23:31.713 に答える
0
capitalize: function(num) {
   return num * 100;
}

あなたのために働くべきです

于 2014-08-04T20:25:50.517 に答える