Javascript 如何覆盖Mustache.js、Hogan.js或handlebar.js的默认输出插值?

Javascript 如何覆盖Mustache.js、Hogan.js或handlebar.js的默认输出插值?,javascript,templates,handlebars.js,mustache,hogan.js,Javascript,Templates,Handlebars.js,Mustache,Hogan.js,有没有办法改变库的默认输出,比如Mustach、Hogan和Handlebar 以下是我的上下文,例如: var context = { primitive: 1, array: [1, 2, 3], object: new Object() } 这就是我希望编译时得到的结果: <div> Primitive: {{primitive}} Array: {{array}} should output <Array#id> instead of "1,

有没有办法改变库的默认输出,比如Mustach、Hogan和Handlebar

以下是我的上下文,例如:

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>

原语:{{Primitive}}
数组:{Array}}应该输出,而不是“1,2,3”
对象:{{Object}}应输出,而不是“[Object Object]”

我知道我可以覆盖那些属性的toString方法,但是在插值发生之前有没有其他类似回调的方法呢?

对于Hogan,可能会有,这取决于你真正想用它做什么;


标记被解析出来后,您可以根据需要操纵树,然后在完成后对其进行编译。

刚刚发现您可以覆盖
handlebar.Utils.escapeeexpression
以在模板内部实现这一点

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]);