2013-01-24 37 views
10

मैं अपने हैंडल टेम्पलेट में इस राशि के साथ मुद्रा फ़ॉर्मेट करने के लिए कार्य करते हैं |: बोली: $ 24000Handlebars जावास्क्रिप्ट

मुझे लगता है कि स्वरूपित करना चाहते हैं अल्पविराम के साथ और मैं असफल रहा हूँ।

मेरे पास यह फ़ंक्शन है जो कंसोल में काम करता है, लेकिन हैंडलबार्स के साथ कोडबेस को अनुकूलित करते समय विफल रहता है।

$.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 प्लगइन से चिपके रह सकते हैं और हैंडलबार टेम्पलेट भरने के बाद इसे लागू कर सकते हैं; कुछ इस तरह:

<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/

+0

केवल रजिस्टर सहायक की आवश्यकता है, धन्यवाद लाखों! – jahrichie

+0

उपर्युक्त के लिए धन्यवाद लेकिन यह बोली के रूप में $ 24000.50 के लिए संभाल नहीं करता है। उस हिस्से पर कोई सलाह? – Tai

+0

@TaiHirabayashi आपका मतलब '.50' हिस्सा है? शायद 'प्रिंटर' जावास्क्रिप्ट लाइब्रेरी को देखने के लिए सबसे अच्छा है और हैंडलबार्स सहायक में लपेटें। –