[英]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.