2012-05-18 60 views
2

我試圖製作一個基於路由行爲不同的標籤,但是當我嘗試在@{ ... }塊內呈現html時,我似乎無法正確插入我的變量。在scala模板中解碼html

@(route: String, on_image: String, off_image: String, alt_text: String) 

@{ 
    val Pattern = ("(" + route + ".*)").r 
    val path = request().path() 


    path match { 
     case Pattern(foo) => { 
      if(path != route && route == "/") { 
       <script type="text/javascript"> 
        alert("{route}"); 
       </script> 
      } else { 
       <script type="text/javascript"> 
        alert("{route}"); 
       </script>   
      } 
     } 
     case _ => { 
      <script type="text/javascript"> 
       alert("{route}"); 
      </script>  
     } 
    } 
} 

當網頁加載完畢後,我得到一個語法錯誤在我的Firebug的控制檯,在它的發現,評估這個腳本標籤的內容:

alert(&quot;/accounts&quot;);

現在的我,已經嘗試了包括整個街區周圍的@Html{ ... }@Html(...)@Html({ ... })之類的內容。我也試過alert(@Html("{bar}"));和其他類似的東西,但一切都會產生各種錯誤。

什麼是正確的方法來做到這一點?

編輯

更新,以顯示嘗試使用只有一個簡單起見變量,並表示在該變量從何而來。

+0

酒吧從哪裏來?假設它也在代碼中的某個地方,你是否在引用中嘗試了@ foo和@ bar而不是{foo}? – aishwarya

+0

這實際上是一個倒退。然後我得到'" @foo "' – Samo

+0

在任何情況下,問題都與引號有關,而不是與內部內容有關。你可以從輸出中看到,我在我的問題中發佈了{foo}(或者實際上,{route})返回值。我需要將這個值轉換成一個javascript字符串。 – Samo

回答

1

解決了一點間接。

@(route: String, on_image: String, off_image: String, alt_text: String) 

@on = { 
    <a href="@route"><img src="@routes.Assets.at(on_image)" alt="@alt_text" /></a> 
} 

@off = { 
    <a href="@route"><img src="@routes.Assets.at(off_image)" alt="@alt_text" /></a> 
} 

@{ 
    val Pattern = ("(" + route + ".*)").r 
    val path = request().path() 


    path match { 
     case Pattern(foo) => { 
      if(path != route && route == "/") { 
       {off} 
      } else { 
       {on}  
      } 
     } 
     case _ => { 
      {off}  
     } 
    } 
}