我有一些客户端静态jQuery代码,我想用我的网站的每个页面上使用的服务器动态代码替换,并取决于我所在的页面(被询问的路由)。 我现有的jQuery代码(在模板html.eex文件中)是:
if (SOME CONDITION) {
$(".page1.firstChild").css({"margin-top": "70px"});
$(".page2.firstChild").css({"margin-top": "70px"});
$(".page3.firstChild").css({"margin-top": "70px"});
$(".page4.firstChild").css({"margin-top": "70px"});
} else {
$(".page1.firstChild").css({"margin-top": "0px"});
$(".page2.firstChild").css({"margin-top": "0px"});
$(".page3.firstChild").css({"margin-top": "0px"});
$(".page4.firstChild").css({"margin-top": "0px"});
}
所以,我想将“.page1
”,“.page2
”,...“.pageN
”替换为使用<% currentPage %>
放置在模板中的变量并在我的layout_view中定义,以便可以在与该布局相关的每个页面上访问它。所以我尝试了这个:
defmodule myApp.LayoutView do
use myApp.Web, :view
def currentPage do
case @conn.request_path do
"/page1" -> "page1"
"/page2" -> "page2"
"/page3" -> "page3"
end
end
end
我收到了这个错误:
undefined function: nil.request_path/0
这样做的最好方法是什么? (我也不确定“案例”代码。)
答案 0 :(得分:8)
@conn
在模板中可用,因为它通过assigns
传递。
但是,您无法定义功能并使其可用。它需要作为参数传递给你的函数:
defmodule myApp.LayoutView do
use myApp.Web, :view
def current_page(conn) do
case conn.request_path do
"/page1" -> "page1"
"/page2" -> "page2"
"/page3" -> "page3"
end
end
end
您可以通过以下方式从模板中调用此方法:
current_page(@conn)
请注意,在长生不老药中,功能应位于snake_case
而不是camelCase
。
除非路径和结果之间有明确的映射,否则在函数中使用case
是正常的。如果您实际上只想删除前导"/"
,那么您可以执行以下操作:
iex(3)> String.slice("/page1", 1..-1)
"page1"