2013-07-26 47 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

相关问题