2012-09-24 22 views
1

我有一個發票與多家項目。當用戶決定改變價格或項目的,則大部該項目的被立即通過這兩個jQuery函數更新:如何在jQuery完成計算後保留Rails的數字格式?

// Re-calculate item subtotal when quantity gets changed 
$('[id$=quantity]').change(function() { 
    var quantity = $(this).val(); 
    var price = $(this).closest('.item_fields').find('[id$=price]').val(); 
    recalculate_subtotal($(this), price, quantity);  
}); 

function recalculate_subtotal($element, price, quantity) { 
    $element.closest('.item_fields').find('#Subtotal').val(price * quantity);  
} 

這工作得很好。但是,似乎jQuery無法保留小計字段的格式。這就是它看起來像在我的代碼:

<%= text_field_tag 'Subtotal', number_to_currency(f.object.subtotal), :disabled => true %> 

因此,當一個用戶創建一個新的項目,小計是由Rails的,例如正確格式化像這樣:$200.00

但此刻他改變項目的價格或數量,所有格式消失,只有赤裸裸的整數仍然存在,例如200

有沒有一種方法使用jQuery保持Rails的格式?

更重要的是,在我的情況下,格式是從.yml文件派生的,所以如果用戶希望如此,它應該能夠適應長期不同的格式。

有誰能告訴我該怎麼做?

回答

1

不幸的是,沒有。

一旦你調用JQuery的,你正在使用JavaScript和JavaScript格式不同,例如,使用toPrecision(2)。

的Rails已經從紅寶石或紅寶石外出中心像RJS和觀察員解決的軌道。

此致是Ruby on Rails的中心解決方案,適合與回報率的開發,並使用相同的技能,無需培訓/員工擁有不同技能集的反駁的一個很好的例子。你的例子是保留事物RoR允許你集中格式化,本地化或用戶偏好。

所以要集中使用常用參數格式的唯一方法是編寫或找到的JavaScript這就像一些紅寶石格式。然後,您可以將頁面中展開的yaml的格式參數作爲參數發送到JavaScript格式。響應

編輯進一步解釋評論

這是一個JavaScript文件ERB的情況下。對定義recalculate_subtotal的文件使用.js.erb擴展名。寫在紅寶石一個輔助方法GET_FORMAT,並在.js.erb文件中使用此代碼:

function format_number(value, <%= get_format %>) 
{ 
    ... 
} 

function recalculate_subtotal($element, price, quantity) 
{ 
    format_number($element.closest('.item_fields').find('#Subtotal').val(price * quantity)); 
} 

對於我來說,這是比較容易的部分。寫入format_number的內容很難。 :)

+0

嘿馬丁,謝謝你的幫助!看起來我必須以某種方式將Yaml文件的格式參數傳遞給jQuery。不過,我還沒有找到辦法。 – Tintin81