当前位置:  开发笔记 > 前端 > 正文

凤凰城:在视图中使用"conn"和"case"

如何解决《凤凰城:在视图中使用"conn"和"case"》经验,为你挑选了1个好方法。

我有一些客户端静态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

这样做的最佳方式是什么?(我也不确定"案例"代码).



1> Gazler..:

@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"

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有