javascript - How can I render via CoffeeScript in Ruby on Rails 4 - Stack Overflow

I was trying to solve this problem for a while with no result.I've wanted to pass variables and l

I was trying to solve this problem for a while with no result. I've wanted to pass variables and load a render into a div using CoffeeScript in rails 4. (I'm using SpreeCommerce platform).

view:

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

controller:

  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) %>")

I'd like to load the page '_products.erb.html' and the partial processes the variables that I give it. As soon as I know, view and controller are ok, the problem is in menu.js.erb.coffee

Any help will be apreciated!

ADDITIONAL:

I've modified the extension to .js.coffee.erb. When I try to run the app, it shows me:

"undefined method `render' for #<#:0xa70317c>"

I tryied using <%= raw escape_javascript( render :partial =>... almost always "render" method give me problems.

NEW INFO:

I added gem 'coffee-script' to the Gemfile (then 'bundle install'). Now, when I click the link_to, it shows me into the HTML <%= escape_javascript(render :partial => /shared/products) %> as a text instead of loading the "partial"... any suggestion please?

I was trying to solve this problem for a while with no result. I've wanted to pass variables and load a render into a div using CoffeeScript in rails 4. (I'm using SpreeCommerce platform).

view:

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

controller:

  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) %>")

I'd like to load the page '_products.erb.html' and the partial processes the variables that I give it. As soon as I know, view and controller are ok, the problem is in menu.js.erb.coffee

Any help will be apreciated!

ADDITIONAL:

I've modified the extension to .js.coffee.erb. When I try to run the app, it shows me:

"undefined method `render' for #<#:0xa70317c>"

I tryied using <%= raw escape_javascript( render :partial =>... almost always "render" method give me problems.

NEW INFO:

I added gem 'coffee-script' to the Gemfile (then 'bundle install'). Now, when I click the link_to, it shows me into the HTML <%= escape_javascript(render :partial => /shared/products) %> as a text instead of loading the "partial"... any suggestion please?

Share edited May 8, 2014 at 17:29 Ivan Carrasco Quiroz asked May 7, 2014 at 22:11 Ivan Carrasco QuirozIvan Carrasco Quiroz 61511 silver badges9 bronze badges 2
  • try doing <%= escape_javascript(render :partial => /shared/products).html_safe %> – davidicus Commented Jul 30, 2014 at 20:22
  • I made it working just with .js and putting this file onto the same folder as my view file was. – Ivan Carrasco Quiroz Commented Jul 9, 2015 at 14:06
Add a ment  | 

3 Answers 3

Reset to default 3

I wrote a post about this after struggling through the same problem.

You need to:

  • Name it menu.js.coffee. Suffixing .erb causes it not to be evaluated as CoffeeScript.
  • Use raw to escape it.

I used these two on my website. Here's how it looks:

<%= raw render 'path/to/menu.js.coffee' %>

It still processes ERB within your CoffeeScript.

I would remend changing it from menu.js.erb.coffee to menu.js.coffee.erb.

Rails will process the file extensions from right to left. Meaning right now, your file is treated first as coffeescript, then as ruby, and finally as javascript. It looks like you want to make the ruby substitutions first, then parse the coffeescript into javascript, so that would be menu.js.coffee.erb

First of all, you should change file name from menu.js.erb.coffee to menu.js.coffee.erb and you need configuration file as follow, which is a contribution by 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

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744927944a4601555.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信