如何在 Phoenix 渲染函数中用 ~H 替换已弃用的 ~E sigil
How to replace deprecated ~E sigil with ~H in Phoenix render funciton
背景
在我学习 Phoenix LiveView 的过程中,我发现自己使用了一个使用已弃用印记的渲染函数:
def render(_assigns) do
~E"""
<menubar>
<menu label="<%= gettext "File" %>">
<hr/>
<item onclick="quit"><%= gettext "Quit" %></item>
</menu>
<menu label="<%= gettext "Extra" %>">
<item onclick="browser"><%= gettext "Open Browser" %></item>
</menu>
</menubar>
"""
end
现在,我知道在 Elixir 中使用 eex
代码是安全的。但是编译器说我应该用 ~H
替换它。所以我的第一次尝试如下:
def render(assigns) do
~H"""
<menubar>
<menu label="{@gettext('File')}">
<hr/>
<item onclick="quit"><%= gettext "Quit" %></item>
</menu>
<menu label="{@gettext 'Extra'}">
<item onclick="browser"><%= gettext "Open Browser" %></item>
</menu>
</menubar>
"""
end
哪个不起作用,也没有在菜单中正确显示文本:
问题
我做错了什么?
回答
我尝试的问题是 @
字符。我可能没有理解错误消息并得出结论 @
必须是变量的一部分。
正确的版本是这样的:
def render(assigns) do
~H"""
<menubar>
<menu label={gettext("File")}>
<hr/>
<item onclick="quit"><%= gettext "Quit" %></item>
</menu>
<menu label={gettext("Extra")}>
<item onclick="browser"><%= gettext "Open Browser" %></item>
</menu>
</menubar>
"""
end
背景
在我学习 Phoenix LiveView 的过程中,我发现自己使用了一个使用已弃用印记的渲染函数:
def render(_assigns) do
~E"""
<menubar>
<menu label="<%= gettext "File" %>">
<hr/>
<item onclick="quit"><%= gettext "Quit" %></item>
</menu>
<menu label="<%= gettext "Extra" %>">
<item onclick="browser"><%= gettext "Open Browser" %></item>
</menu>
</menubar>
"""
end
现在,我知道在 Elixir 中使用 eex
代码是安全的。但是编译器说我应该用 ~H
替换它。所以我的第一次尝试如下:
def render(assigns) do
~H"""
<menubar>
<menu label="{@gettext('File')}">
<hr/>
<item onclick="quit"><%= gettext "Quit" %></item>
</menu>
<menu label="{@gettext 'Extra'}">
<item onclick="browser"><%= gettext "Open Browser" %></item>
</menu>
</menubar>
"""
end
哪个不起作用,也没有在菜单中正确显示文本:
问题
我做错了什么?
回答
我尝试的问题是 @
字符。我可能没有理解错误消息并得出结论 @
必须是变量的一部分。
正确的版本是这样的:
def render(assigns) do
~H"""
<menubar>
<menu label={gettext("File")}>
<hr/>
<item onclick="quit"><%= gettext "Quit" %></item>
</menu>
<menu label={gettext("Extra")}>
<item onclick="browser"><%= gettext "Open Browser" %></item>
</menu>
</menubar>
"""
end