我的发票包含多个商品。当用户决定更改商品的价格或数量时,该商品的小计会立即通过以下两个jQuery函数进行更新:
// 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文件派生的,因此如果用户愿意,它应该能够长期适应不同的格式。
有人能告诉我怎么做吗?
答案 0 :(得分:1)
不幸的是,没有。
一旦调用JQuery,就会使用JavaScript,而JavaScript格式则不同,例如使用toPrecision(2)。
Rails在rjs和观察者等以轨道为中心的解决方案上已经远离红宝石或红宝石。
你的反对论证就是一个很好的例子,ruby on rails为中心的解决方案适合RoR开发,并使用相同的技能组,而无需培训/雇用具有不同技能的人。您的示例是保留RoR允许您集中格式化,本地化或用户首选项。
因此,使用通用参数集中格式化的唯一方法是编写或查找与某些ruby格式相似的JavaScript。然后,您可以将格式参数从页面中展开的yaml作为参数发送到JavaScript格式。
编辑进一步说明以回应评论
这是一个JavaScript文件中的erb案例。对定义recalculate_subtotal的文件使用.js.erb扩展名。在ruby中编写一个帮助方法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的内容很难。 :)