首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >haml_tag直接输出到Haml模板

haml_tag直接输出到Haml模板
EN

Stack Overflow用户
提问于 2012-05-08 04:43:55
回答 1查看 4.2K关注 0票数 8

我的HAML模板的这个帮助器做错了什么?

代码语言:javascript
复制
  def display_event(event)
    event = MultiJson.decode(event)
    markup_class = get_markup_class(event)
    haml_tag :li, :class => markup_class do
      haml_tag :b, "Foo"
      haml_tag :i, "Bar"
    end
  end

这是错误:

代码语言:javascript
复制
haml_tag outputs directly to the Haml template.
Disregard its return value and use the - operator,
or use capture_haml to get the value as a String.

模板调用display_event的方式如下:

代码语言:javascript
复制
 - @events.each do |event|
     = display_event(event)

如果我使用的是常规标记,它将扩展为以下内容

代码语言:javascript
复制
%li.fooclass
   %b Foo
   %i Bar
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-08 04:59:26

线索在错误消息中:

代码语言:javascript
复制
Disregard its return value and use the - operator,
or use capture_haml to get the value as a String.

来自haml_tag的文档

haml_tag直接输出到缓冲区;不应使用其返回值。如果需要以字符串形式获取结果,请使用#capture_haml

要修复它,请将您的Haml更改为:

代码语言:javascript
复制
- @events.each do |event|
  - display_event(event)

(例如,使用-运算符而不是=),或者将方法更改为使用capture_haml

代码语言:javascript
复制
def display_event()
  event = MultiJson.decode(event)
  markup_class = get_markup_class(event)
  capture_haml do
    haml_tag :li, :class => markup_class do
      haml_tag :b, "Foo"
      haml_tag :i, "Bar"
    end
  end
end

这将使该方法返回一个字符串,然后可以在您的Haml中使用=显示该字符串。

请注意,您只需要进行其中一项更改,如果您同时进行了这两项更改,它们将相互抵消,并且不会显示任何内容。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10488855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档