2016-12-02 88 views
0

我正在學鳳凰的Elixir,只是陷入了一個非常愚蠢的問題。我想打電話給一個局部的,從我的索引模板中的呈現方式如下:從elixir的視圖中調用渲染部分視圖

#index.html.slim 

- for element_here <- array_here do 
    = render MyApp.SharedView, "_game.html.slim", element: element_here 

爲此,我創建了一個名爲查看該shared_view.ex看起來像這樣:

defmodule MyApp.SharedView do 
    use MyApp.Web, :view 
    def render("game", _assigns), do: "/shared/_game.html.slim" 
end 

我預期經過共享/ _game.html.slim循環渲染,這是我複製到這裏:

.col-md-4.portfolio-item 
    a href="#" 
    img.img-responsive alt="" src="http://placehold.it/700x400"/
    h3 
    a href="#" Project Name 
    p Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. 

但沒有什麼是被渲染。我也沒有遇到任何錯誤。它只是渲染之前和之後的東西。

我不知道我在這裏錯過了什麼。沒有路由或控制器操作與「_game」部分相關,因爲我認爲它不是必需的(我習慣於使用rails並且在那裏以這種方式工作)。

+1

嘗試'= for'代替o f' - for'。 – Dogbert

+0

nope。一樣。 – ntonnelier

+0

你完全相信嗎? ' - for'會忽略它內部的html輸出,這會導致「它只是在之前和之後呈現這些東西」。 – Dogbert

回答

2

原來是拼寫問題。有兩個問題:

  1. 細長擴展不應該是明確的,如@radubogdan解釋。
  2. 循環應該使用= for而不是- for添加,正如@Dogbert所說。

最後,它看起來是這樣的:

index.html.slim

= for element_here <- array_here do 
    = render MyApp.SharedView, "_game.html", element: element_here 

shared_view.ex

defmodule MyApp.SharedView do 
    use MyApp.Web, :view 
    def render("game", _assigns), do: "/shared/_game.html.slim" 
end 

_game.html.slim

.col-md-4.portfolio-item 
    a href="#" 
    img.img-responsive alt="" src="http://placehold.it/700x400"/
    h3 
    a href="#" Project Name 
    p Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae.