2017-01-06 59 views
1

我是一個貿易前端,但我被要求跳到一個利用Play框架的Scala項目,所以包括Twirl。我試圖創建,這取決於傳入的字符串,顯示略有不同輸出模板斯卡拉/旋轉變量和範圍/定義

這裏是我的代碼:

@(status: String)(implicit messages: Messages) 

@{ 
    if(status == "00") { 
     val pageTitle = "Page title" 
     val appStatus = "className" 
     val title = "message" 
     val subTitle = "message" 
     val step1Status = "className" 
     val step2Status = "className" 
     val step3Status = "className" 
     val image1 = "/customs/assets/images/image.png" 
     val image2 = "/customs/assets/images/image.png" 
     val image3 = "/customs/assets/images/image.png" 
     val optionalHeading = "" 
     val optionalParagraph = "" 
     val listContents = "<li>@Messages('message')</li><li>@Messages('message')</li>" 
     val optionalLink = "<br /><a class='button' href='@routes.DashboardController.display(custom)' role='button'>@Messages('message')</a>" 
    } 

    if(status == "01") { 
     //Other variables 
    } 
    if(status == "04") { 
     //Etc... 
    } 
} 

@layout(${pageTitle}) { 
     <div class="content__body"> 
      <div class="hero"> 
       <div class="${appStatus}"> 
        <h1 class="bold-large">@Messages(${title})</h1> 
        <p> 
         ${afterSubTitle} 
        </p> 
        <ol class="appstatus-steps"> 
         <li><span class="${step1Status}"><img alt="Complete" title="Complete" src=" + ${image1} + ">@Messages("messages.Received")</span></li> 
         <li><span class="${step2Status}"><img alt="Complete" title="Complete" src=" + ${image2} + ">@Messages("messages.Processing")</span></li> 
         <li><span class="${step3Status}"><img alt="Complete" title="Complete" src=" + ${image3} + ">@Messages("messages.Decision")</span></li> 
        </ol> 
       </div> 
      </div> 

      ${optionalHeading} 
      ${optionalParagraph} 

      <h2>@Messages("messages.next")</h2> 

      <ul class="list list-bullet"> 
       ${listContents} 
      </ul> 

      ${optionalLink} 
     </div> 
    } 

所以,你可以看到,這個想法是,這使用代碼(狀態)調用頁面並基於該字符串定義了一些變量,這些變量改變了頁面的形成方式;內容/ CSS類/圖片等

這不起作用(你可能會驚訝地學習!)

這真是我不清楚爲什麼它不雖然。我以爲你使用$ {Variable}格式訪問變量,但可能應該使用@Variable格式。

即使當我嘗試將它們更改爲@Variable方式時,我仍然遇到問題,並且我粗略地理解這是用Scala/Twirl中的範圍做的,並且有一個可以使用的「定義」關鍵字。我讀過一些文檔,但我沒有得到它。

任何人都可以對此有所瞭解嗎?

編輯

好吧,讓我們只考慮下面的代碼來代替:

@(status: String)(implicit messages: Messages) 

@{ 
    if(status == "00") { 
     val myClass = "custom-class-1" 
    } 
    if (status == "01") { 
     val myClass = "custom-class-2" 
    } 
@layout("page title") { 
    <div class="@myClass">This is a div</div> 
} 

所以,「所有我想要做的」 :)是能定義基礎上的各種變量狀態,然後在頁面的模板中使用這些變量。

這有道理嗎?我對斯卡拉很新,所以目前我的Tuples/Defining已經失效,但我正在學習!

回答

1

答案由@pedrorijio幾乎是完全正確的,但最終爲我工作的實際代碼是這樣的:

@myClass = @{status match { 
    case "00" => "custom-class-1" 
    case "01" => "custom-class-2" 
}} 

感謝您的協助!

+0

哦,小錯誤:)旋轉總有一些技巧,應該試過intellij:p – pedrorijo91

+0

啊!這是一個旋轉的東西?我想知道是否是這種情況 - 如果沒有你就不能排序,儘管如此謝謝! –

1

你似乎更習慣的JavaScript變量和範圍:)

在Scala和旋轉扭曲,如果你只if語句定義一個變量(在這種情況下,它是一個價值,因爲它是不可變的)內的,值只是裏面的if塊

一種解決方案可能是有if語句與所有的變量返回一個元組,並使用賦值操作的力量,就像訪問:

val (myA, myB, myC) = if(something) { 
val a = "a" 
val b = "b" 
val c = "c" 

(a,b,c) // this will return the 3 variables/values because if statements are an expression, and expressions return something 
} else { 
val a = "A" 
val b = "B" 
val c = "C" 

(a,b,c) 
} 

// now you have a,b,c defined in this scope and you can do whatever you need with them 

,如果你想根據不同的變量返回在if語句中,你會有更多的複雜性。一個解決辦法是讓不需要的變量nullOption

讓我知道,如果你還需要別的什麼更好的解釋:)

編輯:解決方案,精縮編輯例如

我沒有任何東西來檢查它是否編譯,但它應該是這樣的:

@(status: String)(implicit messages: Messages) 

@{ 
    val myClass = if(status == "00") { 
     "custom-class-1" 
    } else if (status == "01") { 
     "custom-class-2" 
    } else { 
     "" 
    } 

@layout("page title") { 
    <div class="@myClass">This is a div</div> 
} 
使用

替代模式匹配:

與替換if/else語句:

val myClass = status match { 
      case "00" => "custom-class-1" 
      case "01" => "custom-class-2" 
      case _ => "" 
     } 

(該case _就像是 「在所有其他情況」)

+0

謝謝!你是對的,JS更是我的東西!我用一個更小的代碼片段編輯了我原來的帖子。你能提供一個工作的解決方案,所以我可以看到如何格式化我的代碼模式? –

+1

剛剛做了@SonyaBaled :) – pedrorijo91

+0

好的 - 我已經給了這個去,但我得到了同樣的問題,因爲我沒有找到'myClass'的價值。我認爲這是與Scala中的if語句的內部範圍有關,但我可能完全錯誤,因爲我對此很陌生!有任何想法嗎? –