如何覆盖Mustache.js,Hogan.js或Handlebars.js的默认输出插值?

时间:2013-06-16 00:25:44

标签: javascript templates handlebars.js mustache hogan.js

有没有办法改变像Mustache,Hogan和Handlebars这样的库的默认输出?

以下是我的背景信息:

var context = {
  primitive: 1,
  array: [1, 2, 3],
  object: new Object()
}

这就是我在编译时希望得到的结果:

<div>
  Primitive: {{primitive}}
  Array: {{array}} should output <Array#id> instead of "1,2,3"
  Object: {{object}} should output <Object#id> instead of "[Object object]"
</div>

我知道我可以覆盖这些属性的toString方法,但在插值发生之前是否有其他方式像回调一样?

2 个答案:

答案 0 :(得分:0)

根据你真正想做的事情,可能会有Hogan; https://github.com/twitter/hogan.js#features

var text = "{{^check}}{{#i18n}}No{{/i18n}}{{/check}}";
text +=  "{{#check}}{{#i18n}}Yes{{/i18n}}{{/check}}";
var tree = Hogan.parse(Hogan.scan(text));

// outputs "# check"
console.log(tree[0].tag + " " + tree[0].name);

// outputs "Yes"
console.log(tree[1].nodes[0].nodes[0]);

解析出标签,您可以根据需要操作树,然后在完成后进行编译

答案 1 :(得分:0)

刚刚发现您可以覆盖Handlebars.Utils.escapeExpression以在模板内实现此功能。