5

我的 rails 控制器经常返回 JS,我正在使用 Coffeebeans 让我拥有 js.coffee 视图。唯一的问题是它使用<%= ... %>嵌入式 Ruby 的语法......我理想情况下喜欢使用 Coffeescript/HAML 风格的字符串插值,即:#{..}和 HAML 风格的标签,即而不是<%= ... %>,只需使用=适当的缩进即可。

我想这种语法最好与文件扩展名 js.coffee.haml 一起使用。这可能吗?简单地使用该扩展名保存我的文件是行不通的,我猜 Coffeebeans 需要进行一些调整以允许这样做,但我不知道我需要做什么。

这篇文章建议它是可能的:Chaining template handlers in Rails 3

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

4

1 回答 1

0

您链接到的问题有第二个答案,该答案链接到posterous 上的一篇博客文章,现在已经死了......但我在archive.org 上找到了它!该帖子还包含一个要点,其中包含初始化程序所需的代码,以便您可以命名以结尾的文件js.coffee_haml并对其进行处理。

为了防止将来出现死链接,这里是要点中的代码,但我没有编写它,也没有测试它是否仍然有效:

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
于 2013-11-01T01:30:03.477 回答