如何在jQuery完成计算后保留Rails的数字格式?

时间:2012-09-24 11:25:32

标签: jquery ruby-on-rails

我的发票包含多个商品。当用户决定更改商品的价格数量时,该商品的小计会立即通过以下两个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文件派生的,因此如果用户愿意,它应该能够长期适应不同的格式。

有人能告诉我怎么做吗?

1 个答案:

答案 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的内容很难。 :)