簡體   English   中英

如何在另一個自定義幫助程序中調用一個自定義幫助程序函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM