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