我想在另一个辅助函数中使用一个辅助函数。在下面的代码中,我想突出显示姓氏,如果它包含“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/
这里是调用“突出显示”助手的小提琴:http://jsfiddle.net/wC6JT/3/。这不会产生任何结果,因为我们将在“突出显示”寄存器助手中识别出person.lastName的控制台错误。
我想在person.lastName的fullname helper中使用“highlight”帮助器。 如何实现这一目标。
答案 0 :(得分: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);
}
答案 1 :(得分:3)
要从其他功能调用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/
另请参阅this blog post。
答案 2 :(得分:2)
您可以这样使用:http://goo.gl/oY4IIO 不需要连接字符串。
<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);
});
输出: 测试:2.33 格式:2.33