获取 "config variables" 作为静态值的替代方法
Alternative to get "config variables" as static values
我一直在寻找一些静态的全局值,例如,如果某个值为 nil|null 则放置此默认值,例如将默认值 url 放入 link 中,如果没有'在赋值中声明。
示例:
# Create a link with default return if URL not found
<%=
link "Go back",
to: assigns[:url_back] || Application.get_env(:app_name, :default_values)[:url_back]
%>
# example of in ./config/config.exs
config :app_name, :default_values,
url_back: "/index"
- 我的问题是有替代方案吗?
- 我可以使用模块吗
为了这?喜欢:
defmodule StaticValues do
def url_back(), do: "/index"
end
# note: I do not know how to import or use in eex...
如果您决定走模块路线,您可以直接调用 EEx 模板中的函数:
<%=
link "Go back",
to: assigns[:url_back] || StaticValues.url_back()
%>
或者您甚至可以创建一个默认为静态值的辅助函数:
# You would probably want to rename this module in this case
defmodule StaticValues do
def get_with_fallback(assigns, key) do
Map.get(assigns, key, apply(__MODULE__, key, []))
end
def url_back, do: "/index"
end
像
一样使用
<%=
link "Go back",
to: StaticValues.get_with_fallback(assigns, :url_back)
%>
如果有赋值,则使用:
iex> StaticValues.get_with_fallback(%{url_back: "/home"}, :url_back)
"/home"
如果没有,则使用回退:
iex> StaticValues.get_with_fallback(%{}, :url_back)
"/index"
虽然 Brett 的回答是完全正确的,但如果您想更 DRY,可能还有另一种方法。
简单地Map.merge/2
呈现模板之前的默认值。
assigns =
:app_name
|> Application.get_env(:default_values)
|> Map.new()
|> Map.merge(assigns)
我一直在寻找一些静态的全局值,例如,如果某个值为 nil|null 则放置此默认值,例如将默认值 url 放入 link 中,如果没有'在赋值中声明。
示例:
# Create a link with default return if URL not found
<%=
link "Go back",
to: assigns[:url_back] || Application.get_env(:app_name, :default_values)[:url_back]
%>
# example of in ./config/config.exs
config :app_name, :default_values,
url_back: "/index"
- 我的问题是有替代方案吗?
- 我可以使用模块吗 为了这?喜欢:
defmodule StaticValues do
def url_back(), do: "/index"
end
# note: I do not know how to import or use in eex...
如果您决定走模块路线,您可以直接调用 EEx 模板中的函数:
<%=
link "Go back",
to: assigns[:url_back] || StaticValues.url_back()
%>
或者您甚至可以创建一个默认为静态值的辅助函数:
# You would probably want to rename this module in this case
defmodule StaticValues do
def get_with_fallback(assigns, key) do
Map.get(assigns, key, apply(__MODULE__, key, []))
end
def url_back, do: "/index"
end
像
一样使用 <%=
link "Go back",
to: StaticValues.get_with_fallback(assigns, :url_back)
%>
如果有赋值,则使用:
iex> StaticValues.get_with_fallback(%{url_back: "/home"}, :url_back)
"/home"
如果没有,则使用回退:
iex> StaticValues.get_with_fallback(%{}, :url_back)
"/index"
虽然 Brett 的回答是完全正确的,但如果您想更 DRY,可能还有另一种方法。
简单地Map.merge/2
呈现模板之前的默认值。
assigns =
:app_name
|> Application.get_env(:default_values)
|> Map.new()
|> Map.merge(assigns)