1

多数のアイテムを含む請求書があります。ユーザーがアイテムの価格または数量を変更することを決定すると、そのアイテムの小計は次の 2 つの 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を使用することになり、toPrecision(2)を使用するなど、JavaScriptの形式が異なります。

Railsは、rjsやobserversなどのRails中心のソリューションでrubyまたはrubyから離れました。

あなたの意見は、Ruby on Rails中心のソリューションがRoR開発に適合し、異なるスキルセットを持つ人々をトレーニング/雇用する必要なしに同じスキルセットを使用するという反論の良い例です。あなたの例は、物事をRoRに保つことで、フォーマット、ローカリゼーション、またはユーザー設定を一元化できることです。

したがって、共通のパラメーターを使用してフォーマットを一元化する唯一の方法は、いくつかのルビーフォーマットのように機能するJavaScriptを作成または検索することです。次に、ページで展開されたyamlからJavaScriptフォーマットへのパラメーターとしてフォーマットパラメーターを送信できます。

コメントに応じてさらに説明を編集する

これは、JavaScriptファイルのerbの場合です。recalculate_subtotalを定義するファイルには.js.erb拡張子を使用します。ヘルパーメソッドget_formatをrubyで記述し、このコードを.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 に答える