繁体   English   中英

如何在Hogan.js中使用Lambda时获取值

[英]How to get the value when using Lambda in Hogan.js

我有以下函数在jQuery中处理AJAX成功回调:

function success(data) {
    var templateData = {
        items: data,
        formatMoney: function () {
            return function (value) {
                return Globalization.format(value, 'N');
            };
        }
    };

    // fill reports table
    var filledTable = tableTemplate.render(templateData);
    $tableContainer.html(filledTable);
}

这是我的模板的样子:

{#Items}}
<tr>
    <td>{{ProductId}}</td>
    <td>{{#formatMoney}}{{Cost}}{{/formatMoney}}</td>
</tr>
{{/Items}}

问题是,而不是成本的价值我得{{Cost}}。 我知道它应该如何工作,因为它在胡子手册(http://mustache.github.com/mustache.5.html)中描述,但我想得到的价值。

this将指向我的产品对象,所以我可以使用this.Cost得到成本,但这是一个简单的情况,我有许多对象类型,需要格式化的许多属性,因此我需要一个通用的解决方案来保持干燥

我也可以在服务器端计算这个,但我更喜欢在客户端这样做,因为我不仅使用hogan这个数据,而且还用于客户端的其他计算。

是否有更直接,通用和客户端方式来获取Cost的值而不是未渲染的文字块?

是的。

严格遵守规范的胡须实现非常有限。 您的选项将在您的lambda代码中呈现“{{Cost}}”字符串(您应该将此字符串和渲染函数作为您的lambda参数),并将渲染的字符串解析为浮点数,即成本。

当然不干净。 但它会奏效。 不要忘记在您正在使用的Mustache实现的存储库中打开一个问题。

我想我们有两种选择。

1)在hogan.js中使用lambdas

res.render("template", {
          lambdas:{
            formatMoney: function( cost ){
              return cost.format('usd');
            }
          });

而模板应该是

{#Items}}
<tr>
    <td>{{ProductId}}</td>
    <td>{{#lambdas.formatMoney}}{{Cost}}{{/lambdas.formatMoney}}</td>
</tr>
{{/Items}}

2)如问题所述,我们可以使用这个对象。

Javascript代码是

res.render("template", {
  formatMoney:{
    return function(key){
      var cost = this[key];
      return cost.format('usd');
    };
  }
});

而模板是

{#Items}}
<tr>
    <td>{{ProductId}}</td>
    <td>{{#formatMoney}}Cost{{/formatMoney}}</td>
</tr>
{{/Items}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM