8

我想在另一个辅助函数中使用一个辅助函数。在下面的代码中,如果姓氏包含“Finch”字样,我想突出显示它。为此,我有书面助手类。如果我们在 hbs 文件中使用,那么语法将是 {{highlight name}}。但是如何使用它,因为我必须在另一个助手类中使用它。

下面是我的代码:

  Handlebars.registerHelper('fullName', function(person) {
    return person.firstName + " " + person.lastName;
  });

   Handlebars.registerHelper('highlight', function(person) {    
var item = (person.lastName).replace('Finch', '<span style="color: red">' 
  + Finch + '</span>');
return new Handlebars.SafeString(item); 
  });

这是工作小提琴:http: //jsfiddle.net/wC6JT/4/

这是调用“highlight”助手的小提琴。:http: //jsfiddle.net/wC6JT/3/。这不会产生任何结果,因为我们会在“highlight”注册助手中得到 person.lastName 的控制台错误。

我想在 person.lastName 的全名助手中使用“突出显示”助手。这怎么可能实现。

4

3 回答 3

6

要从另一个函数调用 Handlebars 助手,您可以使用Handlebars.helpers

Handlebars.registerHelper('fullName', function(person) {
    var lastName = Handlebars.helpers.highlight.apply(this, [person.lastName]);
    var firstName = Handlebars.Utils.escapeExpression(person.firstName);
    return new Handlebars.SafeString(firstName + " " + lastName);
});

Handlebars.registerHelper('highlight', function(str) {    
    var safeStr = Handlebars.Utils.escapeExpression(str);
    var item = safeStr.replace("Finch", "<em>Finch</em>");
    return new Handlebars.SafeString(item); 
});

这是一个工作小提琴:http: //jsfiddle.net/acLcsL6h/1/

阅读此博客文章以获取另一个示例。

于 2014-12-12T08:56:16.770 回答
5

将您要在第​​一种方法中使用的方法的内容提取到它自己的javascript方法中。然后根据需要在两个助手中调用该 javascript 方法。

除非您将其中一种方法的内容重构为它自己的 javascript 方法,否则您无法做到这一点。

因此,在您的情况下,它应该如下所示:

Handlebars.registerHelper('fullName', function(person) {
    return person.firstName + " " + highlightJavascript(person);
  });

Handlebars.registerHelper('highlight', highlightJavascript);

highlightJavascript : function(person) {
   var item = (person.lastName).replace('Finch', '<span style="color: red">' 
  + Finch + '</span>');
return new Handlebars.SafeString(item); 
}
于 2013-07-26T07:13:25.027 回答
2

you can use this way: http://goo.gl/oY4IIO need not concatenate string.

<script id="tmp" type="text/x-handlebars-template">
    <p>test:   {{test   "2.3333333"}}</p> 
    <p>format: {{format "2.3333333"}}</p>
</script>

Handlebars.registerHelper('format', function (value) {
   return parseFloat(value).toFixed(2);
});
Handlebars.registerHelper('test', function (value) {
    var source = '{{format x}}';
    var context = {x:value};
    var html = Handlebars.compile(source)(context);
    return new Handlebars.SafeString(html);
});
$(document).ready(function () {
    var source = $('#tmp').html();
    var template = Handlebars.compile(source);
    var html = template();

    $('#main').html(html);
});

output: test: 2.33 format: 2.33

于 2014-02-13T02:12:05.640 回答