我是Handlebars的新手,当我找到一个解决方法时,我想知道为什么一个注册助手工作而一个没有。不起作用的示例是HB docs中的一个示例。
HTML:
<ul class="global-nav clearfix">
{{#each data}}
<li><a href="{{href}}">{{text}}</a></li>
{{/each}}
</ul>
...
<ul class="content-nav clearfix">
{{#each data}}
<li><a href="{{href}}">{{text}}</a></li>
{{/each}}
</ul>
数据:
var nav = [
{
name: 'global',
selector: $('.global-nav'),
data: [
{
text: 'Page 1',
href: 'page1.html'
}, {
text: 'Page 2',
href: 'page2.html'
}
],
name: 'content',
selector: $('.content-nav'),
data: [
{
text: 'Section 1',
href: '#section1'
}, {
text: 'Section 2',
href: '#section2'
}
]
}
];
编译器:
$.each(nav, function() {
var obj = this,
src = obj.selector.html(),
template = Handlebars.compile(src),
html = template(obj.data);
obj.selector.html(html);
});
HB Helper(不起作用 - 上下文未定义):
Handlebars.registerHelper('each', function(context, options) {
var ret = "";
for(var i=0, j=context.length; i<j; i++) {
ret = ret + options.fn(context[i]);
}
return ret;
});
HB Helper(使用this
代替上下文工作):
Handlebars.registerHelper('each', function(context, options) {
var ret = "";
for(var i=0, j=this.length; i<j; i++) {
ret = ret + options.fn(this[i]);
}
return ret;
});
感谢任何帮助。
答案 0 :(得分:0)
在查看JS的其余部分之前,我是否可以指出JSON看起来不对。
第二次在JSON中出现名称,选择器和数据时会被覆盖。如果这只是因为在粘贴到SO时忽略了一些位,那么请忽略我; o)
但如果 是真正的JSON,那么在查看任何功能之前需要更改
<script>
var nav = [
{
name: 'global',
selector: $('.global-nav'),
data: [
{
text: 'Page 1',
href: 'page1.html'
}, {
text: 'Page 2',
href: 'page2.html'
}
]
}, // this line
{ // and this line added
name: 'content',
selector: $('.content-nav'),
data: [
{
text: 'Section 1',
href: '#section1'
}, {
text: 'Section 2',
href: '#section2'
}
]
}
];
</script>