2017-04-16 46 views
0

我想呈现View文件中的元素列表。我可以渲染它们,我把它们包裹在另一个元素中,例如:如何使用Phoenix.HTML呈现元素列表

iex(9)> span1 = content_tag(:span, "test1") 
{:safe, [60, "span", [], 62, "test1", 60, 47, "span", 62]} 
iex(10)> span2 = content_tag(:span, "test2") 
{:safe, [60, "span", [], 62, "test2", 60, 47, "span", 62]} 
iex(11)> content_tag(:div, [span1, span2]) |> safe_to_string 
"<div><span>test1</span><span>test2</span></div>" 

但是,如何渲染这两个跨度?以下不起作用。

iex(12)> [span1, span2] |> safe_to_string 
** (FunctionClauseError) no function clause matching in Phoenix.HTML.safe_to_string/1 
    (phoenix_html) lib/phoenix_html.ex:160: Phoenix.HTML.safe_to_string([safe: [60, "span", [], 62, "test1", 60, 47, "span", 62], safe: [60, "span", [], 62, "test2", 60, 47, "span", 62]]) 
iex(12)> 

回答

2

您需要将列表传递给Phoenix.HTML.html_escape/1第一(Phoenix.HTML.Tag.content_tag/2做同样的内部):

iex(1)> import Phoenix.{HTML, HTML.Tag} 
[Phoenix.HTML, Phoenix.HTML.Tag] 
iex(2)> span1 = content_tag(:span, "test1") 
{:safe, [60, "span", [], 62, "test1", 60, 47, "span", 62]} 
iex(3)> span2 = content_tag(:span, "test2") 
{:safe, [60, "span", [], 62, "test2", 60, 47, "span", 62]} 
iex(4)> html_escape([span1, span2]) 
{:safe, 
[[60, "span", [], 62, "test1", 60, 47, "span", 62], 
    [60, "span", [], 62, "test2", 60, 47, "span", 62]]} 
iex(5)> html_escape([span1, span2]) |> safe_to_string 
"<span>test1</span><span>test2</span>"