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 中获取 lambda 的值。

我在示例中有两个辅助函数manualautomatic,它们可以根据所需的行为环绕 lambda 函数定义。

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/

请注意,此解决方案不适用于部分(如果它们是从 lambda 部分内部引用的)。

Hogan.js 2.0.0 的相关代码是lambda 替换部分高阶函数

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

应该为你工作

于 2014-08-04T20:25:50.517 回答
0

我认为这个例子是相关的:https ://github.com/janl/mustache.js#functions 。我的猜测是这应该会有所帮助:

capitalize: function() {
  return function(text, render) {
    return render(text) * 100;
  }
}

类似的帖子:How to get the value when using Lambda in Hogan.js

于 2013-04-24T22:44:00.767 回答