1

我有一张包含许多项目的发票。当用户决定更改商品的价格数量时,该商品的小计会通过以下两个 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 文件派生的,所以从长远来看,如果用户愿意,它应该能够适应不同的格式。

谁能告诉我该怎么做?

4

1 回答 1

1

很不幸的是,不行。

调用 JQuery 后,您将使用 JavaScript,并且 JavaScript 格式不同,例如使用 toPrecision(2)。

Rails 已经远离 ruby​​ 或 ruby​​ on 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 的内容很难。:)

于 2012-09-24T12:57:01.803 回答