読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

【Play Framework】scalaの「implicit」と「FieldConstructor」がわけわからん過ぎてワロタ

Play Framework Scala Bootstrap

スポンサードリンク

f:id:aipacommander:20150222095455p:plain


こんな感じのHTMLを作成したかったのね。

<tr>
    <th class="col-sm-2 control-label" for="id_name">ラベル</th>
    <td class="col-sm-10">
        <input type="text" id="id_name" name="id_name" value="" class="form-control" placeholder="ラベル">
    </td>
</tr>

この中にあるlabelタグのfor="id_name"を出力したかったんだけど、どうやってやればいいのかわからなかった。



呼び出し側でforを定義する


呼び出し側でforを渡せばいいかなと単純に思った。CakePHPのHelperみたいな使い方だね。

@(formValue:Form[TestClass])
@import helper._
@implicitFieldConstructor = @{ FieldConstructor(noLabelInputTextHelper.f) }

@inputText(formValue("id_name"), '_for -> "id_name", 'class -> "form-control", '_label -> "ラベル", 'placeholder -> "ラベル", '_help -> "")


んで、呼び出し側でこう書いた

  • helper/noLabelInputTextHelper.scala.html
@(elements: helper.FieldElements)

<tr>
    <th class="col-sm-2 control-label" for="@elements.for">@elements.label</th>
    <td class="col-sm-10">
        @elements.input
    </td>
</tr>


そうするとfor="@elements.for"の箇所でエラーが。。。(°ω°;


これが正解


そもそもforを書かずに、@elements.idで取得するのが正解らしい

@(formValue:Form[TestClass])
@import helper._
@implicitFieldConstructor = @{ FieldConstructor(noLabelInputTextHelper.f) }

@inputText(formValue("id_name"), 'class -> "form-control", '_label -> "ラベル", 'placeholder -> "ラベル", '_help -> "")
  • helper/noLabelInputTextHelper.scala.html
@(elements: helper.FieldElements)

<tr>
    <th class="col-sm-2 control-label" for="@elements.id">@elements.label</th>
    <td class="col-sm-10">
        @elements.input
    </td>
</tr>


よくわかってないお(^ω^ = ^ω^)