我的rails控制器经常返回JS,我正在使用Coffeebeans来允许我拥有js.coffee视图。唯一的问题是它使用嵌入式Ruby的<%= ... %>
语法...我最好使用Coffeescript / HAML样式字符串插值,即:#{..}
和HAML样式标记,即而不是<%= ... %>
,只需使用=
进行适当的缩进。
我认为这种语法最适合用于文件扩展名js.coffee.haml。这可能吗?简单地使用该扩展名保存我的文件不起作用,我猜想Coffeebeans需要稍微调整以允许这样做,但我不知道我需要做什么。
这篇文章建议:Chaining template handlers in Rails 3
有关如何解决这个问题的任何建议?
答案 0 :(得分:0)
您链接到的问题有第二个答案链接到博客文章,该文章已经过时了......但是I found it on archive.org!帖子还包含初始化程序中需要的a gist with the code这样您就可以命名以js.coffee_haml
结尾的文件并对其进行处理。
为了防止将来死链接,这里是gist中的代码,但我没有写它,也没有测试它是否仍然有效:
module Coffee
module Rails
class HamlTemplateHandler
def self.haml_handler
@@haml_handler ||= ActionView::Template.registered_template_handler(:haml)
end
def self.call(template)
compiled_source = haml_handler.call(template)
"CoffeeScript.compile(begin;#{compiled_source};end)"
end
end
end
end
ActiveSupport.on_load(:action_view) do
ActionView::Template.register_template_handler :coffee_haml, Coffee::Rails::HamlTemplateHandler
end
博客文章中还提到haml不允许嵌套的纯文本,所以如果你想在coffeescript中做这样的事情:
if xyz == 1
do_this y
do_that x
你必须将它包装在:plain
过滤器中:
:plain
if xyz == 1
do_this y
do_that x