Javascript 为什么车把模板中的修剪字符串不渲染?

Javascript 为什么车把模板中的修剪字符串不渲染?,javascript,handlebars.js,Javascript,Handlebars.js,有人能解释为什么在下面的示例中,result返回string时,type of result会作为[object object]打印到控制台吗 我从车把文档的最底层选取了这个示例: 我认为这可能与把手不允许使用aString原型的toString方法有关,但如果文档正确,这应该可以工作 var template=handlebar.compile(document.getElementById('template').innerHTML); var result=模板({aString:“a

有人能解释为什么在下面的示例中,
result
返回
string
时,
type of result
会作为
[object object]
打印到控制台吗

我从车把文档的最底层选取了这个示例:

我认为这可能与把手不允许使用
aString
原型的
toString
方法有关,但如果文档正确,这应该可以工作

var template=handlebar.compile(document.getElementById('template').innerHTML);
var result=模板({aString:“abc”}{
允许的方法:{
修剪:对
}
});
console.log(结果、结果类型);
document.getElementById('output').innerHTML=result


{{aString.trim}
这本质上是一个典型的“丢失
这个
”问题。当Handlebar评估
aString.trim
时,它返回对
String.prototype.trim
的引用。此时,
aString
的“连接”将丢失,
trim
不知道在哪个值上操作

这可以通过使用自定义对象+方法复制来演示:

var template=handlebar.compile(document.getElementById('template').innerHTML);
var结果=模板({
傅:{
数据:“数据”,
getData(){返回this.data | |'未找到'},
staticData(){返回“静态数据”;}
},
});
document.getElementById('output').innerHTML=result


{{foo.getData}{{foo.staticData}
可能是因为
结果
字面上是
“[object object]”
aString.trim
是一个函数对象。看起来您只是在遵循文档中的示例?你还打了两次电话给template哦,我的错。应该只调用一次,但问题是相同的@FelixKling,是的,该示例直接来自文档。@FelixKling
typeof
运算符返回
string
。如果它是一个函数对象,我希望它返回
function
。您可以尝试
typeof function(){}
。我认为trim函数实际上应该由HandleBars调用。我明白你的意思,但我真的不明白它是如何丢失的。您的示例显示的内容与此处询问的内容相同:。那么,问题是文档中的示例是否应该以某种方式起作用,或者它是否是错误的?@Tobi:我认为文档是错误的,但为了获得绝对的确定性,我将创建一个关于它的GitHub问题。