我有以下函数在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}}而不是Cost的价值。我知道它应该如何工作,因为它在胡子手册(http://mustache.github.com/mustache.5.html)中描述,但我想得到的价值。
this
会指向我的产品对象,因此我可以使用this.Cost
获得成本,但这是一个简单的案例,我有很多具有许多需要格式化的属性的对象类型,因此我需要一个通用的解决方案保留DRY。
我也可以在服务器端计算这个,但我更喜欢在客户端这样做,因为我不仅将这些数据用于hogan,还用于客户端的其他计算。
是否有更直接,通用和客户端方式来获取Cost的值而不是未渲染的文字块?
答案 0 :(得分:1)
是的。
严格遵守规范的Mustache实现非常有限。您的选项将在您的lambda代码中呈现“{{Cost}}”字符串(您应该将此字符串和渲染函数作为您的lambda参数),并将渲染后的字符串解析为浮点数,即成本。 / p>
肯定不干净。但它会奏效。不要忘记在您正在使用的Mustache实现的存储库中打开一个问题。
答案 1 :(得分:0)
我认为我们有两种选择。
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}}