我正在尝试编写一个自定义Ember手柄助手,它将返回一些HTML,但我无法访问帮助程序中的块内容。
模板:
{{#link}}
This is the block content
{{/link}}
助手:
Ember.Handlebars.registerHelper('link', function (options) {
var result = '<a href="http://example.com/">'
+ options.fn(this)
+ '</a>';
return new Handlebars.SafeString(result);
});
我期待的结果是:<a href="http://example.com/">This is the block content</a>
相反,我得到:This is the block content <a href="http://example.com/">undefined</a>
小提琴:http://jsfiddle.net/NQKvy/676/
我做错了什么?
答案 0 :(得分:1)
我不确定目前是否可以轻松地在Ember.Handlebars中使用块助手。但是,您可以使用“常规”Handlebars助手,如下所示:
{{link "This is the block content" url="http://www.example.com"}}
助手:
Ember.Handlebars.registerHelper('link', function (value, options) {
var result = '<a href="'+options.hash.url+'">'
+ value
+ '</a>';
return new Handlebars.SafeString(result);
});
请参阅this jsFiddle。
答案 1 :(得分:1)
@chopper有关于如何做你正在寻找的事情的正确答案。但是,我只是想谈谈Block Helpers的问题,以澄清它们的含义。
块帮助器用于确定块的渲染模式。他们不&#34;包装&#34;助手。
例如,您无疑熟悉的Block Helper是一个简单的{{#if}}帮助器。这个帮助器会引入一个条件,并使用它来输出包含在其中的信息。但它不会在被阻止的部分之前/之后附加信息。
更复杂的块助手是{{#each}}助手。每个帮助器将遍历一个集合,并且通过重复调用options.fn(arrayItem),它将在每次迭代时多次渲染块,将新数据输入到指定的车把标签中。 但是这些标签是输入信息所必需的。。