Rails/Javascript:如何将rails变量注入(非常)简单的javascript中

Pla*_*Ton 4 javascript ruby-on-rails coffeescript

我想在rails中编写一个非常简单的javascript计算器,它将输入字段的数量乘以存储在rails变量中的数字(@ item.base_price)

所以,在javascript/coffeescript方面,它粗略地说:

# app/assets/javascript/items.js.coffee
$ -> 
  $('#item_quantity').change ->
    quantity_val = $(this).val()
    $('#total_amount').html(quantity_val * <%= I_WANT_@ITEM.BASE_PRICE_HERE %>)
Run Code Online (Sandbox Code Playgroud)

我知道如何通过每次change()调用的ajax调用来实现这一点,但我认为必须有一个优雅的,希望不显眼的rails方式,每次都不会命中服务器.

任何建议非常感谢

Mat*_*hew 6

如果您使用的是rails 3.1,则可以利用资产管道对javascript文件进行一些预处理,然后再进行提供.要执行此操作,只需更改文件扩展名:

items.js.coffee
Run Code Online (Sandbox Code Playgroud)

items.js.coffee.erb
Run Code Online (Sandbox Code Playgroud)

然后你就可以像在带有<%= %>标签的视图中一样为你的javascript添加ruby .您可能遇到的唯一问题是,您的items.js文件将被提供给您的任何应用程序控制器方法的每个请求.因此,最好编写一个辅助方法,只有在初始化实例变量时才会返回值

例如,在items_helper.rb中

def item_price
    if @item
        @item.base_price
    else
        0
    end
end
Run Code Online (Sandbox Code Playgroud)

编辑:更多关于资产管道:

http://guides.rubyonrails.org/asset_pipeline.html