Javascript 如何在另一个自定义助手中调用一个自定义助手函数

Javascript 如何在另一个自定义助手中调用一个自定义助手函数,javascript,handlebars.js,Javascript,Handlebars.js,我想在另一个助手函数中使用一个助手函数。在下面的代码中,我想突出显示姓氏,如果它包含“Finch”单词。我有一个Writern助手类。 如果我们在hbs文件中使用,那么语法将是{{highlight name}}。 但是如何使用它,因为我必须在另一个助手类中使用它 下面是我的代码: Handlebars.registerHelper('fullName', function(person) { return person.firstName + " " + person.lastNa

我想在另一个助手函数中使用一个助手函数。在下面的代码中,我想突出显示姓氏,如果它包含“Finch”单词。我有一个Writern助手类。 如果我们在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); 
  });
handlebar.registerHelper('fullName',函数(person){
返回person.firstName+“”+person.lastName;
});
车把.注册表帮助器('突出显示',功能(人){
变量项=(person.lastName).replace('Finch','
+芬奇+”;
归还新把手。安全绳(项目);
});
这是工作小提琴:

这是一把小提琴,它叫“突出显示”助手。这不会产生任何结果,因为我们将在“highlight”register helper中无法识别person.lastName的控制台错误

我想在person.lastName的全名助手中使用“突出显示”助手。
如何实现这一点。

将第一个方法中要使用的方法的内容提取到它自己的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); 
}
handlebar.registerHelper('fullName',函数(person){
return person.firstName+“”+highlightJavascript(person);
});
把手。注册表帮助器('highlight',highlightJavascript);
highlightJavascript:函数(个人){
变量项=(person.lastName).replace('Finch','
+芬奇+”;
归还新把手。安全绳(项目);
}
您可以这样使用: 不需要连接字符串

<script id="tmp" type="text/x-handlebars-template">
    <p>test:   {{test   "2.3333333"}}</p> 
    <p>format: {{format "2.3333333"}}</p>
</script>
输出: 测试:2.33
格式:2.33

要从另一个函数调用车把助手,可以使用:

handlebar.registerHelper('fullName',函数(person){
var lastName=handlebar.helpers.highlight.apply(此[person.lastName]);
var firstName=handlebar.Utils.escapeeexpression(person.firstName);
返回新把手。安全字符串(firstName+“”+lastName);
});
把手.注册表帮助器('highlight',函数(str){
var safeStr=handlebar.Utils.escapeeexpression(str);
var项目=安全替代(“芬奇”、“芬奇”);
归还新把手。安全绳(项目);
});
这是一把小提琴:


阅读另一个例子。

@muistooshort:我已经更新了代码和小提琴。它的打字错误。这是小提琴,它不起作用。如果我删除highlight helper,那么它可以工作,但是它会显示整个标记,而不是html内容。我不确定fiddle出了什么问题,但我已经在我的应用程序中实现了,它工作得很好。谢谢。不应该
handlebar.registerHelper('highlight',highlightJavascript(person))
be
handlebar.registerHelper('highlight',highlightJavascript)?你想给registerHelper提供函数,而不是调用它。@CorayThan除了上述答案之外的任何方法,实际上我需要根据parent helper中的参数调用helpers。@Arjun T Raj抱歉,这超出了我的Javascript专业知识。你应该在这里包含链接的主要内容,好像链接更改一样。你的答案将无效。@user3250923:Hmm很好。但是过了很长时间。谢谢你的链接。请包括链接内容。
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);
});
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); 
});