2012-05-01 10 views
20

フォームテンプレートヘルパーには、in the play 2 scala tutorialという指示をgrokしようとしています。私は「あなた自身のフィールドコンストラクタの作成」のセクションに固執しています。これは、(ファイルの名前はどうあるべきか言わず)サンプルテンプレートを与える:Play 2(scala)でカスタムフィールドコンストラクタを作成する

@(elements: helper.FieldElements) 

<div class="@if(elements.hasErrors) {error}"> 
    <label for="@elements.id">@elements.label</label> 
    <div class="input"> 
     @elements.input 
     <span class="errors">@elements.errors.mkString(", ")</span> 
     <span class="help">@elements.infos.mkString(", ")</span> 
    </div> 
</div> 

それからそれはこのコードを示しています

object MyHelpers { 
    implicit val myFields = FieldConstructor(myFieldConstructorTemplate.f)  
} 

私はこれがに関連することになっているかについて混乱していますテンプレート。 (例えば、テンプレートファイルはmyFieldConstructorTemplate.scala.htmlと呼ばれるはずですか?)私はこれにいくつかの変形を試みました。

私はscalaとPlayの両方に新しいですが、私もplay 2とそのドキュメントが新しいことを知っています。したがって、私は何が信じられないほど明白でないのか分かりません。

ありがとうございました!チュートリアルで

+0

は、あなたはそれを呼び出してみました'myFieldConstructorTemplate.scala.html'?それは私が知る限り、それがうまくいくはずなのです。 –

+0

https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/views/helper/twitterBootstrap/package.scala - 私はこのファイルを参考にすることができますフィールドコンストラクタの初期化を理解してください – asyncwait

答えて

9

このコードは、テキストに沿っている:

多くの場合、あなたはあなた自身のフィールドコンストラクタを記述する必要があります。これは、あなたがあなた自身のテンプレート(xxxx.scala.html)を作成し、内部にそのコードを追加しなければならないことを意味

:のようなテンプレートを書く することから始めます。その後、あなたは(あなたのカスタムフィールドを使用する各Scalaのテンプレートにそれを追加することを忘れないでください)、それらが提供するコードを使用してテンプレートにそれをインポートします。

@implicitField = @{ FieldConstructor(xxxx.f) } 

は、プレイのサンプルを確認し、フォームのサンプルは、同様のアプローチを使用していますTwitterのブートストラップでちょうど同じ問題を持っていた私は、私はドキュメントは全く明らかではないが、あなたに同意

+0

うーん、これは私が試した最初のもので、うまくいきませんでした。タイプミス、多分?私はそれを別のものにします。ありがとう! –

+1

2.4のドキュメントは、暗黙的なval myFields = FieldConstructor(html.xxxx.f) 'を示唆しています。 'views'ディレクトリに' xxxx.scala.html'を他のテンプレートと一緒に作成しましたので、暗黙的なval myFields = FieldConstructor(views.html.xxxx.f) 'が必要でした。 –

16

...

可能性のあるエラー1

not found: value FieldConstructor 

それはあなたがいないことを意味しこの命令でヘルパーをインポート:

@import helper._ 

可能性のあるエラー2

not found: value implicitConstructor 

これは、テンプレートの間違った場所にフィールドコンストラクタを宣言していることを意味します。 :@ helper.formメソッド内)。

@import form._ 
@import helper._ 

@implicitConstructor = @{ FieldConstructor(foundation_field.render) } 

(マイfoundation_field.scala.htmlファイルがviews.formパッケージである):この問題を解決するために、私はちょうど私のインポート命令の後に私のフィールドコンストラクタを宣言しました。 Scalaの暗黙のキーワードのロジックに従って

-1

、文書があまりにも暗黙的である;)

スカラ座とプレイはドキュメントが非常に悪いという理由で、今あまりにも未熟です。

このSOFの答えは非常に良いです:https://stackoverflow.com/a/15268122/1163081

また、より多くの例のためのプレイソースチェックすることができます。https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/views/html/

それとも、この男を解決を発見するために表示されます。https://groups.google.com/forum/#!msg/play-framework/2e1EqZJ-Qks/gXD1oo0IjfcJ

関連する問題