Cin*_*lla 8 javascript handlebars.js
我想在另一个辅助函数中使用一个辅助函数.在下面的代码中,我想突出显示姓氏,如果它包含"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);
});
Run Code Online (Sandbox Code Playgroud)
这是工作小提琴:http://jsfiddle.net/wC6JT/4/
这里是调用"突出"助手的小提琴:http://jsfiddle.net/wC6JT/3/.这不会产生任何结果,因为我们将得到person.lastName的控制台错误,无法在"突出显示"寄存器帮助程序中识别.
我想在person.lastName的fullname helper中使用"highlight"帮助器.如何实现这一目标.
将要在第一个方法中使用的方法的内容提取到其自己的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);
}
Run Code Online (Sandbox Code Playgroud)
要从另一个函数调用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);
});
Run Code Online (Sandbox Code Playgroud)
这是一个有效的小提琴:http : //jsfiddle.net/acLcsL6h/1/
阅读此博客文章以获得另一个示例。