2013-12-18 28 views
0

我目前在我的scala.html文件中使用PropertyDTO的列表來使用Play2填充視圖。 propertyDTO具有包含JSON字符串的String屬性「value」。我想將此字符串轉換爲scala.html文件中的JSON對象,並遍歷JSON對象集合。當嘗試以下操作時,在scala.html文件中將字符串轉換爲JSON

val json = Json.parse(property.value),作爲scala代碼中的[JsObject],它打印表達式。我想知道我的方法是否正確,如果沒有,是否有適合的解決方案。

代碼 - > scala.html

@(propertyList : List[PropertyDTO]) 

    @for(property <- propertyList){ 
     @if(property.isInputProperty){ 
      @if(property.propertyType=="BL"){   
       val json = Json.parse(property.value).as[JsObject] 
      }  
     } 
    } 

回答

0

的問題是,你需要聲明的代碼通過將一個@在它的前面被解釋成Scala代碼。該行

val json = Json.parse(property.value).as[JsObject] 

被解釋爲HTML,因爲在指示scala代碼的行中沒有@符號。你可以做的是使用@{ ... }聲明一個包含scala代碼的完整塊。

例如,你可以存儲的結果,你在一個變量修真模板以後使用:

@import play.api.libs.json._ 

@validPropertiesAsJson = @{ 
    for{ 
    property <- propertyList 
    if property.isInputProperty 
    if property.propertyType == "BL" 
    } yield Json.parse(property.value).as[JsObject] 
} 

後來在模板中使用@validPropertiesAsJson包含的價值。 更多信息可以在playframework文檔中找到:http://www.playframework.com/documentation/2.2.0/ScalaTemplates

請記住儘可能少的邏輯模板。

3

我不會建議在模板中這麼做 - 有模板,而不是將HTML生成直接嵌入到Scala代碼中,是將視圖邏輯與應用程序邏輯分開。如果你在你的模板中嵌入這樣的Scala代碼,那麼使用模板有什麼意義?

最佳做法是在調用模板之前準備好所有數據以進行渲染,然後將其傳遞到模板中,並儘可能保持模板不變,只是迭代和渲染值。