2013-01-24 50 views
10

我在车把模板有这样的格式化货币:把手功能使用javascript

<span class="currencyFormatMe">{{_current_price}}</span> 

什么环路回报的例子|:出价:$ 24000

我想格式化用逗号和我失败。

我有这个功能,它在控制台中工作,但失败时,适应代码库与车把。

$.fn.digits = function(){ 
    return this.each(function(){ 
     $(this).text($(this).text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")); 
    }) 
} 

我这样称呼它 $( “span.currencyFormatMe”)数字()。

它再一次在控制台中工作,但在适应时失败。任何指针非常欢迎

与registerhelper试了一下:

Handlebars.registerHelper('formatCurrency', 
    $.fn.digits = function(){ 
     return this.each(function(){ 
      $(this).text($(this).text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")); 
     }) 
    } 
); 

呼唤:

{{formatCurrency _current_price}} 
+0

你不应该使用一个registerHelper – epascarello

+0

@epascarello更新上面的代码,以反映我在助手尝试.. ..没有运气。任何突出的东西? – jahrichie

回答

18

你有几个简单的选择这里。

你可以坚持你的jQuery插件,并在Handlebars模板填充后应用它;是这样的:

<script id="t" type="text/x-handlebars"> 
    <span class="currencyFormatMe">{{_current_price}}</span> 
</script> 

然后:

$.fn.digits = function(){ 
    return this.each(function(){ 
     $(this).text($(this).text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")); 
    }) 
}; 

var t = Handlebars.compile($('#t').html()); 
var h = t({ 
    _current_price: 1000 
}); 
$('<div>').append(h).find('.currencyFormatMe').digits(); 

演示:http://jsfiddle.net/ambiguous/732uN/

也可以将您的插件转换成一个把手帮手,做模板的格式。如果你想这样做,你只需要将传递给助手的值格式化,而不是在助手内部搞乱$(this)。例如:

<script id="t" type="text/x-handlebars"> 
    {{formatCurrency _current_price}} 
</script> 

然后:

Handlebars.registerHelper('formatCurrency', function(value) { 
    return value.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); 
}); 

var t = Handlebars.compile($('#t').html()); 
var h = t({ 
    _current_price: 1000 
}); 

演示:http://jsfiddle.net/ambiguous/5b6vh/

+0

只需要注册帮助,谢谢! – jahrichie

+0

感谢上述,但它不处理24000.50美元作为出价。有关该部分的任何建议? – Tai

+0

@TaiHirabayashi你的意思是'.50'部分?可能最好查找一个'prinft' JavaScript库并将其包装在Handlebars帮助器中。 –