我不理解Handlebars.js自述文件中的这个“块帮助器”示例

时间:2012-09-17 15:23:04

标签: javascript ember.js handlebars.js

https://github.com/wycats/handlebars.js/#registering-helpers

在之前的“注册帮助者”部分中,他们演示了如何创建单标签帮助程序:

Handlebars.registerHelper('link_to', function(context) {
  return "<a href='" + context.url + "'>" + context.body + "</a>";
});
{{#posts}} <li>{{{link_to this}}}</li> {{/posts}}

请注意,传入'context',他们可以通过说'context.url','context.body'等轻松访问它的属性。

https://github.com/wycats/handlebars.js/#block-helpers

好吧,在“Block Helpers”一节中,他们有一个类似的例子,但似乎有点不必要的错综复杂:

Handlebars.registerHelper('link', function(context, fn) {
  return '<a href="/people/' + this.__get__("id") + '">' + fn(this) + '</a>';
});
{{#people}} <li>{{{#link}}}{{name}}{{/link}}</li> {{/people}}

首先,这次他们没有在开始标记中传递'this',那么帮助者如何接收'context'参数?如果Handlebars为了方便而自动传递,那么为什么不对单标签助手也这样做呢?然后第一个示例可以使用“{{link_to}}”而不是“{{link_to this}}”。我错过了什么?

其次,如果块帮助器收到“上下文”参数,那么为什么它不能像单标签帮助器一样使用它?为什么不能说'context.id'而不是可怕的'this。得到(“id”)'?我错过了什么?

我希望这似乎不像在文档中挑选尼特。比较和对比是我学会真正理解事物本质的方式。帮助我用理解来代替混乱。 :)

1 个答案:

答案 0 :(得分:2)

我相信README.md中的示例已经过时,但是它存在一个问题#234,它仍然是今天开放的。

看看http://handlebarsjs.com/block_helpers.html处的Block Helpers示例......乍一看似乎是最新的。