【问题标题】:How to use local or instance variable in ruby code in coffeescript in haml template如何在haml模板的coffeescript中使用ruby代码中的局部变量或实例变量
【发布时间】:2015-06-25 19:59:52
【问题描述】:

我是 Rails 的新手,在尝试在 haml 模板中的咖啡脚本中使用 ruby​​ 辅助方法中的变量时遇到了复杂的问题。

这是我在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​​ 辅助方法中获取 javascript 变量?

提前致谢!

【问题讨论】:

  • coffeescript 在浏览器中运行,但 Ruby 在服务器上。如果您需要从您的视图与您的控制器/模型进行通信,您可以提交一个表单,params 将拥有表单内容或使用 Ajax。从您的代码看来,您实际上想将 @video 从您的辅助方法传递到视图。您可以直接在您的视图(haml 文件)中引用@video,它会在您设置样式时呈现其内容。希望这会有所帮助。
  • 实际上我想在填充输入字段后获取@video,因此将参数传递给控制器​​是我想要的答案。我会试试看。谢谢!

标签: ruby-on-rails ruby coffeescript haml


【解决方案1】:

Coffee Script 和 Rails 引擎的关系?

rails和coffee脚本之间没有关系,rails中的任何内容都不能在coffee脚本中访问。

那我该怎么办?

只需在您的视图文件夹中创建def.js.erb 文件并编写您的javascript 代码。在此文件中,您可以访问方法中的所有实例变量。

它是如何调用 method.js.erb 的?

使用这个:

respond_to do |format|
  format.js
end

这将调用 method.js.erb 文件而不是 method.html.erb 文件。

希望对您有所帮助

【讨论】:

    【解决方案2】:

    简短的回答是,你不能。 Ruby 在您的服务器上运行,但您放入模板中的任何 JavaScript(CoffeeScript 发出的)都将在浏览器中运行。

    您放在coffee: 块中的任何内容必须是有效的 CoffeeScript。正如其他人在 cmets 中指出的那样,如果您希望 Rails 通过 JS 做某事,您需要 Ajax。

    例如,要使用 Ajax 创建一个 Model,请在 JS 中设置一个带有 create 动作和 post 的控制器。

    更多详情,请参阅优秀的Working with JavaScript in Rails 教程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      相关资源
      最近更新 更多