2016-09-15 1 views
1

누구든지 컨트롤러의 변수가 모듈 속성으로보기에 마술처럼 나타남을 설명 할 수 있습니까? 예를 들어View 속성은 Phoenix에서 어떻게 생성됩니까?

, 컨트롤러에서이 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

나는 본다! 고맙습니다 @ 도버트, 이것은 정답입니다. 나는 레일과 같은 모양의 템플릿을 가지고있는 것으로 상상할 수 있습니다. 답변을 게시 해주세요. 동의 할 것입니다. – 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)) 템플릿을 함수로 컴파일 할 때.

관련 문제