2016-09-15 33 views
1

任何人都可以解釋我如何從控制器變量神奇地出現在視圖中作爲模塊屬性?如何在鳳凰城創建視圖屬性?

例如,這render/3在控制器:

defmodule MyApp.UserController do 
    def show(conn, %{"id" => user_id}) do 
    render conn, "show.html", user: Repo.get(User, user_id) 
    end 

創建一個屬性@user我可以像在模板中使用:

Hello, <%= @user.first_name %> 

據我所知,模板成爲功能,它位於在該視圖中,如MyApp.UserView。這意味着@userMyApp.UserView模塊的屬性。但是如何?

+1

我認爲我的答案的前兩句話在這裏很好地回答你的問題:http://stackoverflow.com/a/39391047/320615 – Dogbert

+0

我明白了!非常感謝@Dogbert,這是一個正確的答案。我可以想象它已經完成了模板類似軌道的外觀。請張貼您的答案我會接受它 – Grych

回答

2

任何人都可以解釋我是如何從控制器變量神奇地出現在視圖中作爲模塊屬性?

它們不是模塊屬性。 EEx只使用相同的語法,並通過使用EEx.Engine行爲實現模塊使其行爲可由用戶插入。 The default EEx Engine converts them toEEx.Engine.fetch_assign!(var!(assigns), unquote(name))Phoenix's Engine converts them toPhoenix.HTML.Engine.fetch_assign(var!(assigns), unquote(name))當模板被編譯成函數。