簡體   English   中英

如何通過Ruby on Rails 4中的CoffeeScript進行渲染

[英]How can I render via CoffeeScript in Ruby on Rails 4

我試圖解決這個問題一段時間沒有結果。 我想在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。 當我嘗試運行該應用程序時,它顯示我:

“##:0xa70317c>的未定義方法`render'”

我嘗試使用<%= raw escape_javascript( render :partial =>...幾乎總是“render”方法給我帶來問題。

新信息:

我在Gemfile中添加了gem'coffee gem 'coffee-script' (然后是' bundle install ')。 現在,當我點擊link_to時,它會將我顯示為HTML <%= escape_javascript(render:partial => / shared / products)%>作為文本而不是加載“部分”...有什么建議嗎?

在經歷了同樣的問題后,我寫了一篇關於這個的帖子

你需要:

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

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

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

它仍在您的CoffeeScript中處理ERB。

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

Rails將從右到左處理文件擴展名。 現在意思是,你的文件首先被視為coffeescript,然后被視為ruby,最后被視為javascript。 看起來你想首先進行ruby替換,然后將coffeescript解析為javascript,這樣就是menu.js.coffee.erb

首先,您應該將文件名從menu.js.erb.coffee更改為menu.js.coffee.erb ,您需要配置文件如下,這是cervinka對coffee-rails問題#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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM