Elixir 凤凰:使用;康涅狄格州;及;案例;看来

Elixir 凤凰:使用;康涅狄格州;及;案例;看来,elixir,phoenix-framework,Elixir,Phoenix Framework,我有一些客户端静态jQuery代码,我想用服务器动态代码替换它们,这些代码用于我网站的每个页面,并且取决于我所在的页面(请求的路径)。 我现有的jQuery代码(在模板html.eex文件中)是: 因此,我想将“.page1”、“.page2”、…“.pageN”替换为一个变量,该变量使用放置在模板中,并在我的布局视图中定义,以便可以在与该布局相关的每个页面上访问它。所以我试了一下: defmodule myApp.LayoutView do use myApp.Web, :view

我有一些客户端静态jQuery代码,我想用服务器动态代码替换它们,这些代码用于我网站的每个页面,并且取决于我所在的页面(请求的路径)。 我现有的jQuery代码(在模板html.eex文件中)是:

因此,我想将“
.page1
”、“
.page2
”、…“
.pageN
”替换为一个变量,该变量使用
放置在模板中,并在我的布局视图中定义,以便可以在与该布局相关的每个页面上访问它。所以我试了一下:

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

最好的方法是什么?(我也不确定“case”代码)。

@conn
在通过
分配时可在模板中找到

但是,您不能定义函数并使其可用。需要将其作为参数传递给函数:

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)
请注意,在elixir中,函数应该在
snake\u case
中,而不是
camelCase

在函数中使用
case
是可以的,除非路径和结果之间有明确的映射。如果您实际上只想删除前导的
“/”
,则可以执行以下操作:

iex(3)> String.slice("/page1", 1..-1)  
"page1"
iex(3)> String.slice("/page1", 1..-1)  
"page1"