1

请注意,这不是要求任何有效解决方案的问题,而是最佳实践是什么的问题?种类。

在我的观点中,我有很多这样的代码出现(我使用 HAML):

= t("some.key")
%b= t("other.key.#{string}")
%i= string

一旦它在许多不同的地方使用,我决定将它提取给一个助手。但我意识到我不明白什么是最干净的方法。

我可以考虑使用字符串连接+(或) 并打扰而不是仅仅声明三个字符串。"%s %s %s" % [...][...].join("\n")" ""\n"html_safe

我认为这concat就是应该以这种方式工作的

def long_string(string)
  concat t("some.key")
  concat content_tag(:b, t("other.key.#{string}"))
  concat content_tag(:i, t(string)
end

...并且它有效,但它迫使我执行助手而不是评估它,这不是惯用的,我的意思是使用

%p- long_string(string)

代替

%p= long_string(string)

当然,我可以将它提取到部分,但对于三行代码来说似乎太多了。

也就是说,我是否错过了一些简洁优雅的方式来在帮助程序中连接三个丰富的 HTML 行,或者concat/partial/dirty 数组连接是我唯一的选择?

4

1 回答 1

0

如果是很多 HTML,我肯定会去提取部分内容。在我个人看来,没有什么比 HAML 更干净地编写和读取 HTML 了。

如果它是一堆字符串插值,组成很多值,我有时会使用助手来清理我的视图,但它们总是会返回字符串,我从不在我的助手中使用concat,这也使我的助手更好地测试(只需检查如果字符串结果是我所期望的)。

因此,对于您的示例,它将是

def long_string(str)
  result = []
  result << t("some.key")
  result << content_tag(:b, t("other.key.#{string}"))
  result << content_tag(:i, string)
  result.join(" ").html_safe
end

在你看来你可以写

%p= long_string('whatevvva')

希望这可以帮助。

于 2012-12-05T12:55:49.603 回答