【问题标题】:How can I render via CoffeeScript in Ruby on Rails 4如何在 Ruby on Rails 4 中通过 CoffeeScript 进行渲染
【发布时间】:2014-06-25 02:44:42
【问题描述】:

我试图解决这个问题一段时间,但没有结果。 我想在 rails 4 中使用 CoffeeScript 传递变量并将渲染加载到 div 中。 (我正在使用 SpreeCommerce 平台)。

查看:

<%= link_to taxonomy.name,root_path+'t/'+tid, {class: "uno", remote: true} %>

控制者:

  respond_to do |format|
    format.html
    format.js  # menu.js.coffee.erb
  end

menu.js.erb.coffee:

$('div#productos').html("<%= escape_javascript(render :partial => /shared/products) %>")

我想加载页面“_products.erb.html”并部分处理我给它的变量。据我所知,视图和控制器都可以,问题出在 menu.js.erb.coffee

我们将不胜感激!

附加:

我已将扩展名修改为 .js.coffee.erb。当我尝试运行该应用程序时,它会显示:

"# 的未定义方法 `render'"

我尝试使用&lt;%= raw escape_javascript( render :partial =&gt;... 几乎总是“渲染”方法给我带来问题。

新信息:

我将gem 'coffee-script' 添加到 Gemfile(然后是“bundle install”)。 现在,当我单击 link_to 时,它会将我显示为 HTML /shared/products) %> 作为文本而不是加载“部分”.. . 有什么建议吗?

【问题讨论】:

  • 试试&lt;%= escape_javascript(render :partial =&gt; /shared/products).html_safe %&gt;
  • 我让它只与 .js 一起工作,并将这个文件放在与我的视图文件相同的文件夹中。

标签: javascript ruby-on-rails-4 coffeescript render partial


【解决方案1】:

wrote a post about this 在经历了同样的问题之后。

你需要:

  • 将其命名为menu.js.coffee。后缀 .erb 会导致它不被评估为 CoffeeScript。
  • 使用raw 转义它。

我在我的网站上使用了这两个。下面是它的外观:

&lt;%= raw render 'path/to/menu.js.coffee' %&gt;

它仍然在你的 CoffeeScript 中处理 ERB。

【讨论】:

    【解决方案2】:

    我建议将其从 menu.js.erb.coffee 更改为 menu.js.coffee.erb

    Rails 将从右到左处理文件扩展名。现在的意思是,您的文件首先被视为coffeescript,然后是ruby,最后是javascript。看起来您想先进行 ruby​​ 替换,然后将 coffeescript 解析为 javascript,所以应该是 menu.js.coffee.erb

    【讨论】:

    • 我已经按照你说的修改了文件,问题依然存在。你有什么想法来解决这个问题吗?提前致谢!
    • 实际问题是什么?您能否更新您的问题以包含该内容?
    【解决方案3】:

    首先,您应该将文件名从menu.js.erb.coffee更改为menu.js.coffee.erb,并且您需要以下配置文件,这是cervinka on coffee-rails issue #36的贡献

    config/initializers/coffee_erb_handler.rb

    ActionView::Template.register_template_handler 'coffee.erb', Coffee::Rails::TemplateHandler # without this there will be template not found error
    
    class ActionView::PathResolver < ActionView::Resolver
      EXTRACT_METHODS = %w{extract_handler_and_format_and_variant extract_handler_and_format} # name for rails 4.1 resp. 4.0
    
      method_name = EXTRACT_METHODS.detect{|m| method_defined?(m) || private_method_defined?(m)}
      raise 'unknown extract method name' if method_name.nil?
    
      old_method_name = "old_#{method_name}"
    
      alias_method old_method_name, method_name
      define_method(method_name) do |path, default_formats|
        self.send(old_method_name, path.gsub(/\.js\.coffee\.erb$/, '.js.coffee'), default_formats)
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2017-05-07
      • 2018-06-25
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 2013-06-24
      相关资源
      最近更新 更多