如何在Elixir Temple模板中插入未缩放的文本?
我正在试用长生不老药库,在转义值方面遇到了一些问题 基本上,我有一些文本,我不想被转义,只是在它的原始状态添加 例如,在我的控制器中:如何在Elixir Temple模板中插入未缩放的文本?,elixir,temple,Elixir,Temple,我正在试用长生不老药库,在转义值方面遇到了一些问题 基本上,我有一些文本,我不想被转义,只是在它的原始状态添加 例如,在我的控制器中: conn |> assign(:scripts_js, "alert('ok')") 然后在模板中,我执行以下操作: script do text @scripts_js end 然而,其结果是: 警报(';正常';) 我还尝试了部分: script do partial @scripts_js end 但结果也没有发生 我
conn
|> assign(:scripts_js, "alert('ok')")
然后在模板中,我执行以下操作:
script do
text @scripts_js
end
然而,其结果是:
警报(';正常';)
我还尝试了部分:
script do
partial @scripts_js
end
但结果也没有发生
我如何在Temple的模板中插入未缩放的文本?我应该为此使用自定义组件还是库以某种方式支持它
注意:这里javascript只是一个示例。我不是在寻找如何在页面中插入JS的答案(带有src attr的脚本标记就可以了)。我需要知道的是要插入一个未经转换的字符串,它可能是JS、CSS、HTML或其他任何内容。您可以将JS放入文件中,然后在模板中使用:
script type: "text/javascript", src: @js_path
在控制器中的操作中,您将写入:
def my(conn, _params) do
render(conn,
"my.html", #template
js_path: Routes.static_path(conn, "/js/my.js") #path to js file
)
end
import "./my.js"
在js/app.js
的底部,您会写:
def my(conn, _params) do
render(conn,
"my.html", #template
js_path: Routes.static_path(conn, "/js/my.js") #path to js file
)
end
import "./my.js"
然后创建包含以下内容的文件js/my.js
:
alert("ok");
您遇到的问题是因为Temple的text()
function/macro在字符串上调用了Phoenix.HTML.HTML\u escape()
。不幸的是,text()
返回的是:好的
,而不是实际的文本,否则您可以通过类似于hmtEntities.decode()
的管道将text()
的返回值返回原始字符串。您可以将js放在一个文件中,然后在模板中使用:
script type: "text/javascript", src: @js_path
在控制器中的操作中,您将写入:
def my(conn, _params) do
render(conn,
"my.html", #template
js_path: Routes.static_path(conn, "/js/my.js") #path to js file
)
end
import "./my.js"
在js/app.js
的底部,您会写:
def my(conn, _params) do
render(conn,
"my.html", #template
js_path: Routes.static_path(conn, "/js/my.js") #path to js file
)
end
import "./my.js"
然后创建包含以下内容的文件js/my.js
:
alert("ok");
您遇到的问题是因为Temple的text()
function/macro在字符串上调用了Phoenix.HTML.HTML\u escape()
。不幸的是,text()
返回:好的
,而不是实际的文本,否则你可以通过hmtEntities.decode()
之类的管道将text()
的返回值返回原始字符串。我直接在中问了这个问题,从@mhanberg那里得到了答案。
因此,基本上,要在模板中放置未缩放的文本,我们应该使用以下内容:
partial Phoenix.HTML.raw("<div>Unescaped content!</div>")
# alternative approach, since all Phoenix.HTML.raw does is mark it as :safe
partial {:safe, "<div>Unescaped content!</div>"}
我直接问了这个问题,从@mhanberg那里得到了答案。
因此,基本上,要在模板中放置未缩放的文本,我们应该使用以下内容:
partial Phoenix.HTML.raw("<div>Unescaped content!</div>")
# alternative approach, since all Phoenix.HTML.raw does is mark it as :safe
partial {:safe, "<div>Unescaped content!</div>"}
不幸的是,这并不能回答这个问题。这里您只是展示了如何将js文件导入到模板中,这一点非常明显。我需要知道的是,如何在Temple的模板中插入一个未加修饰的文本。这里javascript只是一个例子。我也很清楚为什么Temple的text()函数会进行转义,在发布问题之前我已经阅读了它的代码。我已经阅读了它的代码——那么答案应该很明显。我已经阅读了“text”和“partial”函数的代码,并简要浏览了其余的源代码,但仍然找不到任何内容。但也许我遗漏了一些东西,因为模板库只允许转义变量,这很奇怪。这就是我问的原因。不幸的是,这并不能回答这个问题。这里您只是展示了如何将js文件导入到模板中,这一点非常明显。我需要知道的是,如何在Temple的模板中插入一个未加修饰的文本。这里javascript只是一个例子。我也很清楚为什么Temple的text()函数会进行转义,在发布问题之前我已经阅读了它的代码。我已经阅读了它的代码——那么答案应该很明显。我已经阅读了“text”和“partial”函数的代码,并简要浏览了其余的源代码,但仍然找不到任何内容。但也许我遗漏了一些东西,因为模板库只允许转义变量,这很奇怪。这就是我问的原因。