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

Posted

技术标签:

【中文标题】我可以在 Coffeebeans / js.coffee 视图中使用 HAML 风格的嵌入式 ruby​​ 吗?【英文标题】:Can I use HAML-style embedded ruby with Coffeebeans / js.coffee views? 【发布时间】:2012-06-29 06:42:01 【问题描述】:

我的 rails 控制器经常返回 JS,并且我正在使用 Coffeebeans 来允许我拥有 js.coffee 视图。唯一的问题是它对嵌入式 Ruby 使用 <%= ... %> 语法......我最好使用 Coffeescript/HAML 风格的字符串插值,即:#.. 和 HAML 风格的标签,即代替 @987654324 @,只需使用带有适当缩进的=

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

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

关于如何解决这个问题有什么建议吗?

【问题讨论】:

我建议继续使用 erb,因为在 .js 的纯文本中不能有缩进。不幸的是,使用haml,代码看起来并不漂亮:( 你真的需要那个吗?无论哪种方式查看世代都会增加大量开销:) 【参考方案1】:

您链接到的问题有第二个答案,该答案链接到posterous 上的一篇博文,该博文现在已经死了......但是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

【讨论】:

以上是关于我可以在 Coffeebeans / js.coffee 视图中使用 HAML 风格的嵌入式 ruby​​ 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Ant 使用 exec 目标编译 Coffee Scripts

我可以将 UIImage 作为文本放在 textview 中,以便我可以在 ios 中将它们作为文本删除

我可以创建一个学生,但它不会保存在 mysql 表上。我收到一个控制台错误,我可以弄清楚它是啥[关闭]

一旦我可以使用 XMPP 列出用户,我如何在这些用户之间实现聊天?

我可以在 github 页面上将我的 wordpress 博客作为静态网页托管吗

不适用于 App Store - 有人可以告诉我在哪里可以找到系统音量代码吗?