如何在haml模板中的coffeescript中的ruby代码中使用本地或实例变量
我是更新的rails并且面临复杂的问题,试图在haml模板中的coffeescript中使用ruby helper方法中的变量。
这是我的haml代码
:coffee $('input#field').blur -> input = $('input#field').val() #{ ruby_method( input )}
ruby_helper.rb
def ruby_method (arg) if arg @model = Model.new(arg) end end
这导致如下错误
未定义的局部变量或方法
还尝试了实例变量
:coffee $('input#field').blur -> @input = $('input#field').val() #{ ruby_method( @input )}
这不能将它传递给辅助方法。
如何在ruby helper方法中获取javascript变量?
提前致谢!
简短的回答是,你做不到。 Ruby在您的服务器上运行,但您放入模板中的任何JavaScript(CoffeeScript发出的)都将在浏览器中运行。
你放入coffee:
任何东西coffee:
块必须是有效的CoffeeScript。 正如其他人在评论中指出的那样,如果你希望Rails通过JS做一些事情,你需要Ajax。
例如,要使用Ajax创建Model
,请使用create
action设置控制器并在JS中发布。
有关更多详细信息,请参阅Rails中的优秀使用JavaScript教程。
咖啡脚本和Rails引擎关系?
rails和coffee脚本之间没有任何关系,并且可以在咖啡脚本中访问rails中的任何内容。
那我该怎么办?
只需在视图文件夹中创建def.js.erb
文件并编写您的javascript代码即可。 在此文件中,您可以访问方法中的所有实例变量。
它如何调用method.js.erb?
用这个:
respond_to do |format| format.js end
这将调用method.js.erb文件而不是method.html.erb文件。
希望能帮助到你
- 如何配置Rails 3.2 + / 4以生成.js而不是.js.coffee默认情况下?
- 有没有想过不选择已在令牌输入中选择的名称?
- 使用will_paginate gem在rails 3.2.3中调用Ajax
- 在coffeescript中获取rails视图辅助方法
- 如何将CoffeeScript(或JavaScript)执行限制在Rails 3.1中的特定控制器和操作?
- 在rails资产管道中的js.coffee文件中使用erb时出错
- 从另一个文件连接reactjs组件
- 如何在Rails 3.1 for CoffeeScript中使用选项“–bare”?
- Marionette CompositeView为Collection中的每个Model而不是ItemView(Marionette Rails)渲染自己