![](/img/trans.png)
[英]Using result of one helper function in another helper function within Handlebars
[英]How to call one custom helper function in another custom helper
我想在另一個輔助函數中使用一個輔助函數。 在下面的代碼中,我想突出顯示姓氏,如果它包含“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”幫助器。 如何實現這一目標。
將要在第一個方法中使用的方法的內容提取到其自己的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);
}
要從另一個函數調用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/
閱讀此博客文章以獲取另一個示例。
您可以使用這種方式: 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.