我有一些客户端静态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
这样做的最佳方式是什么?(我也不确定"案例"代码).
@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"