2016-04-06 2 views
2

Я пытаюсь управлять атрибутом href этого тега привязки html с помощью параметра scala и, похоже, не может заставить его работать.Воспроизвести синтаксис шаблона scala для строки

@{ 
    val key = p.getKey() 
    if(key == "facebook") { 
    <a href="/authenticate/@(key)">Sign in with facebook</a> 
    } else if (key == "twitter"){ 
    <a href="/authenticate/{key}"> 
     <span>Sign in with twitter {key} (this works)</span> 
    </a> 
    }  
} 

В обоих примерах HREF атрибут не генерируя правильно, но когда я использую {ключ} в тег диапазона, который находится вне атрибута HTML, он печатает ключ правильно.

+0

Вы пытались '@ {key}'? Вы используете круглые скобки в первом примере 'href', а во втором -' @ '. – Eric

ответ

1

Twirl не имеет поддержки для else-if. Так как это вызвало проблемы, вы завернули его в динамический блок @{}, который вы можете сделать, я думаю (никогда не пробовал). Однако это не так, как обычно делаются, предпочтительнее использовать сопоставление шаблонов.

Вот как ваш код может выглядеть следующим образом:

@p.getKey() match { 
    case "facebook" => { 
     <a href="/authenticate/@{p.getKey()}">Sign in with facebook</a> 
    } 
    case "twitter" => { 
     <a href="/authenticate/@{p.getKey()}"> 
      <span>Sign in with twitter - key @{p.getKey()} </span> 
     </a> 
    } 
} 

Теперь, когда работает, но вы можете также определить многоразовый контекстное значение с defining (вместо вальса), чтобы сократить дублирование p.getKey и HREF сам:

@defining(p.getKey()) { key => 
    @defining(s"/authentication/$key") { href => 
     @key match { 
      case "facebook" => { 
       <a href="@href">Sign in with facebook</a> 
      } 
      case "twitter" => { 
       <a href="@href"> <span>Sign in with twitter - key @key</span> </a> 
      } 
     } 
    } 
} 

Если предположить, что сообщение все равно для ключа он получает еще проще, за исключением, лом сопоставления с образцом и HREF, определяющий (так как его использовали только один раз):

@defining(p.getKey()) { key => 
    <a href="/authentication/@key">Sign in with @key</a> 
}