如何在 app/views 中渲染 new.js.coffee.erb?
Posted
技术标签:
【中文标题】如何在 app/views 中渲染 new.js.coffee.erb?【英文标题】:How to render new.js.coffee.erb in app/views? 【发布时间】:2011-11-28 18:55:03 【问题描述】:使用 Rails 3.1 jquery_ujs,我有一个 :remote => true 的链接,控制器 new 操作用 js 响应并渲染 new.js.erb,其中包含:
$('#post-form').html('<%= escape_javascript(render(:partial => "form")) %>');
它呈现 _form.html.erb 部分。这行得通。
现在我想使用 Coffeescript,但是将 new.js.erb 重命名为 new.js.coffee.erb 不起作用。资产管道是否仅适用于应用程序/资产?我究竟做错了什么?谢谢。
【问题讨论】:
【参考方案1】:我在使用 Rails 3.1.0 时遇到了同样的问题。尝试将您的文件重命名为 new.js.coffee
。尽管文件名上没有扩展名,它仍应呈现 erb。
视图模板不遵循与资产管道相同的约定,这确实令人困惑。
【讨论】:
已确认;尽管缺少扩展名,但对部分进行了 ERB 评估,并且渲染能够很好地找到文件。 如果您同意这令人困惑,您可能想就这个问题发表意见:github.com/rails/coffee-rails/issues/36 一点更新。从 Rails 4 开始,您可以(并且必须)添加 .erb 扩展名,以便 erb 在 coffeescript 之前将其解析为模板。 @IAmNaN 直到 Rails 4.1.9,但名为action.js.coffee.erb
的视图文件不会被识别为视图模板
实际上即使在 Rails 4.2/coffee-rails 4.1.0 中也无法识别此扩展...【参考方案2】:
如果您希望保留 .js.coffee.erb
扩展名,请使用 Rails 4 的一段代码,让 Rails 将该文件识别为有效的视图模板:
# 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 = %wextract_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
(这是投稿by cervinka on coffee-rails issue #36)
【讨论】:
以上是关于如何在 app/views 中渲染 new.js.coffee.erb?的主要内容,如果未能解决你的问题,请参考以下文章