11

我的车把模板中有这个:

<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").digits();

同样,这一切都在控制台中工作,但在适应时失败。非常欢迎任何指针

用 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}}
4

1 回答 1

23

你有几个简单的选择。

您可以坚持使用您的 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/

或者您可以将您的插件转换为 Handlebars 助手并在模板中进行格式化。如果你想这样做,你只需要格式化传递给助手的值,而不是在$(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/

于 2013-01-24T03:40:07.963 回答