【问题标题】:Passing data to helper (including tags)将数据传递给助手(包括标签)
【发布时间】:2014-09-14 09:20:12
【问题描述】:

我有一个辅助函数,它在 haml 模板中调用。它使用xpath 来修改data 的内容。为确保此工作正常,data 必须是有效的html。以下示例失败,因为 data 不是有效的 html。

%pre
  = foo(data)

现在的想法是将data 包装到pre 标记中,并将这个有效的html 传递给foo,如下所示。

= foo("<pre>#{data}</pre>")

haml 中是否可能出现类似的情况?不使用字符串操作? 该解决方案适用于任何类型的标签。例如它应该适用于标题:

%h1.title
  = foo(heading_data)

【问题讨论】:

  • 你对这个错误有什么细节吗?
  • xpath 根本不起作用,如果它不是有效的 html。

标签: ruby-on-rails ruby haml


【解决方案1】:

数据

首先,您要向助手发送纯 HTML 什么?

与大多数编程一样,您发送给助手的“参数”只是调用方法的方式。这意味着您只需发送您需要的最简洁的数据,并让帮助程序/方法根据您的需要输出。

坦率地说,我建议反对发送您正在查看的数据文件。


推荐

在不知道您的 foo 方法是什么的情况下,我建议您这样做:

#view
= foo data

#app/helpers/application_helper.rb
class ApplicationHelper
   def foo data
      code = "<pre>#{data}</pre>"
      return raw code
   end
end

【讨论】:

  • foo 正在使用xpath 修改给定数据。为此,我需要确保数据有效html --> 因此首先将其包装到标签中。这个例子很好,但我正在寻找一种更通用的方法,以便它适用于不同类型的标签,而不仅仅是 pre 标签。
  • 好的,我想您的更新提供了更多上下文,我实际上同意这一点。你能用你刚才概述的细节更新你的问题吗?
【解决方案2】:

我并不完全清楚你要做什么,但在我看来,你的函数的使用应该遵循

= foo do
  %pre= data

= foo do
  %h1= data

在第二种情况下。为了支持这一点,你的 foo 函数应该看起来像

def foo(&block)
  data = capture(&block)
  # transform data and return it
  # Don't forget about html safety!
end

这里data 将设置为评估传递给foo 方法的标记块的结果

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 2011-09-27
    • 2020-05-16
    • 2021-04-05
    • 2013-08-14
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多