2013-07-26 48 views
7

我想在另一個助手函數中使用一個助手函數。在下面的代碼中,如果它包含「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在「highlight」註冊助手中無法識別的控制檯錯誤。

我想在personname.lastName的全名助手中使用「highlight」助手。 這怎麼可能實現。

+0

@ muistooshort:我更新了我的代碼和小提琴。它的錯字。它是person.lastName – Cindrella

回答

4

將您想要在第一個方法中使用的方法的內容提取到它自己的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); 
} 
+0

這是小提琴:它沒有工作。 http://jsfiddle.net/wC6JT/14/。如果我刪除突出幫助器,然後它的作品,但它顯示整個標記而不是html的東西。 – Cindrella

+0

不知道小提琴出了什麼問題,但我已在我的應用程序中實現,並且其工作完美。謝謝。 – Cindrella

+1

不應該'Handlebars.registerHelper('highlight',highlightJavascript(person));'是'Handlebars.registerHelper('highlight',highlightJavascript);'?你想給'registerHelper'函數,而不是調用它。 –

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

+0

您應該在鏈接中包含主要內容,就像鏈接更改您的答案是無效的一樣。 –

+0

@ user3250923:嗯不錯。但過了很久。感謝您的鏈接。請包含鏈接內容。 – Cindrella

2

爲了從另一個調用功能的車把幫手,你可以使用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

相關問題