我可以在Coffeebeans / js.coffee视图中使用HAML风格的嵌入式ruby吗?

时间:2012-06-27 18:38:23

标签: ruby-on-rails-3 coffeescript haml

我的rails控制器经常返回JS,我正在使用Coffeebeans来允许我拥有js.coffee视图。唯一的问题是它使用嵌入式Ruby的<%= ... %>语法...我最好使用Coffeescript / HAML样式字符串插值,即:#{..}和HAML样式标记,即而不是<%= ... %>,只需使用=进行适当的缩进。

我认为这种语法最适合用于文件扩展名js.coffee.haml。这可能吗?简单地使用该扩展名保存我的文件不起作用,我猜想Coffeebeans需要稍微调整以允许这样做,但我不知道我需要做什么。

这篇文章建议:Chaining template handlers in Rails 3

有关如何解决这个问题的任何建议?

1 个答案:

答案 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