为什么表达式1,2和4按预期工作,但不是3和5
HTML:
<script id="template" type="text/x-handlebars-template">
<ol>
<li>{{dash 'abc' (concat a b)}}</li>
<li>{{dash d (concat a b)}}</li>
<li>{{dash c.c (concat a b)}}</li>
<li>{{dash (concat a b) c.c}}</li>
<li>{{dash (concat a e.e) c.c}}</li>
</ol>
</script>
<div id="rendered"></div>
JavaScript的:
Handlebars.registerHelper('dash', function(a, b) {
return a + "-" + b;
});
Handlebars.registerHelper('concat', function(a, b) {
return a + b;
});
var template = Handlebars.compile($("#template").html());
$("#rendered").html(template({a: 'a', b:'b', c:{c:'c'}, d:'d', e: {e: 'e'}}));
jsfiddle:http://jsfiddle.net/beradrian/6T8ah/
实际结果是
1. abc-ab
2. d-ab
3. c-[object Object]
4. ab-c
5. ae-[object Object]
我填写了Handlebars的错误报告:https://github.com/wycats/handlebars.js/issues/800。
答案 0 :(得分:0)
如果第一个参数是路径(点)表示法,则忽略第二个参数,并替换为对第一个参数的根路径的引用。
这绝对是一个错误,根据您对错误报告的评论,它看起来像是在v2.0.0-beta.1中发布的。
如果您没有使用该版本,则解决方法是将帮助程序放在{{#with}}
块中,并从第一个参数中删除路径表示法。
注意:虽然您无法在第一个参数中使用prop.subprop
表示法,但可以毫无问题地使用../prop
。
例如:
<script id="template" type="text/x-handlebars-template">
<ol>
<li>{{dash 'abc' (concat a b)}}</li>
<li>{{dash d (concat a b)}}</li>
<li>{{#with c}}
{{dash c (concat ../a ../b)}}
{{/with}}</li>
<li>{{dash (concat a b) c.c}}</li>
<li>{{#with e}}
{{dash (concat ../a e) ../c.c}}
{{/with}}</li>
</ol>
</script>
<div id="rendered"></div>