2014-05-07 28 views
3

我試圖解決這個問題一段時間沒有結果。 我想傳遞變量並使用CoffeeScript中的軌道4將渲染加載到div中。 (我正在使用SpreeCommerce平臺)。如何在Ruby on Rails 4中通過CoffeeScript渲染4

視圖:

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

我想LOA d頁面'_products.erb.html'和部分處理我給它的變量。只要我知道,查看和控制器是好的,問題是在menu.js.erb.coffee

任何幫助將被認爲是!

補充:

我修改了擴展.js.coffee.erb。當我嘗試運行應用程序,它讓我看到:

「未定義的方法`呈現」爲#<#:0xa70317c>」

我使用<%= raw escape_javascript(render :partial =>...幾乎總是 「渲染」 tryied方法給我問題。

NEW INFO:

我添加gem 'coffee-script'到Gemfile中(然後 'bundle install')。 現在,當我點擊link_to時,它會將文本顯示爲一個文本,而不是加載「部分」... HTML中的任何建議,請將其顯示爲HTML <%= escape_javascript(render:partial =>/shared/products)%>

+0

貢獻嘗試做 '<%= escape_javascript(render:partial => /shared/products).html_safe%>' – davidicus

+0

您是否解決了這個問題? – ashes999

+0

我使用.js工作,並將該文件放到與我的視圖文件相同的文件夾中。 –

回答

1

我建議將它從menu.js.erb.coffee更改爲menu.js.coffee.erb

Rails將從右向左處理文件擴展名。現在的含義是,您的文件首先被視爲咖啡文本,然後是紅寶石,最後是JavaScript。它看起來像你想首先做紅寶石替換,然後解析咖啡腳本爲JavaScript,所以這將是menu.js.coffee.erb

+0

我已經修改了文件,如上所述,問題仍然存在。你有什麼想法來解決這個問題嗎?先進的感謝! –

+0

實際問題是什麼?你能否更新你的問題來包含它? – tyler

3

wrote a post about this掙扎後通過相同的問題。

您需要:

  • 將其命名爲menu.js.coffee。後綴.erb導致它不被評估爲CoffeeScript。
  • 使用raw來逃避它。

我在我的網站上使用了這兩個。下面是它的外觀:

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

它仍然您的CoffeeScript中處理ERB。

0

首先,你應該更改文件名從menu.js.erb.coffeemenu.js.coffee.erb,你需要配置文件作爲跟隨,這是cervinka on coffee-rails issue #36

配置/初始化/ 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