如何访问自定义Ember车把助手的块内容?

时间:2014-02-11 13:24:58

标签: ember.js handlebars.js

我正在尝试编写一个自定义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/

我做错了什么?

2 个答案:

答案 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),它将在每次迭代时多次渲染块,将新数据输入到指定的车把标签中。 但是这些标签是输入信息所必需的。