4

Scalaフォームヘルパーは私が期待するほど一貫性がありません

@form(action = routes.Admin.insertNewArticle, 'class -> "form-horizontal") {
  <fieldset>
    @textarea(field = articleForm("text"), args = 'rows -> 3, 'cols -> 50)
    @input(articleForm("author"), "author")
  </fieldset> 
}

フィールドはinputとても見栄えがよく、左側にラベルがあり、右側にフィールドがあります。しかし、これtextareaは奇妙なこと<div>で、ラベル付きでラップされていませんが、<dl>タグ内にあり、下部に「必須」の記号があり、削除する方法がわかりません。

これがどのように見えるかのイメージです:

ここに画像の説明を入力してください

フォームの一貫性を保つためのヒントはありますか?

ありがとう。

4

1 に答える 1

3

いくつかのオプションがあります。

まず、ヘルパーをオーバーライドして、textareaコントロール用に独自の手巻きHTMLを挿入することができます。これについては、 「フォームテンプレートヘルパーの使用」の「HTML入力の作成を自分で処理する」セクションのドキュメントで説明されており、一般的な落とし穴についてはここで説明しています。ラベルを含むdivが必要な場合は、次のようにします。

@helper.input(field = articleForm("text")) { (id, name, value, args) =>
    <div>
        <label>text</label>
        <textarea name="@name" id="@id" rows='3' cols='50'>@value</textarea>
    </div>
}

CSSを使用して、textareaヘルパーによって生成されたデフォルトのHTMLのスタイルを設定することもできます。<dl>タグは単なる定義リストであり、他のHTMLリストと同じようにスタイルを設定できます。参考までに、デフォルトのフィールドコンストラクターコードはgithubにあります。これは、生成されたhtmlがどのように見えるかを示しています。

あなたが話している「必須」の記号は<dd>、生成されたHTMLに表示されるエラータグであると思います。手作業で作成されたHTMLルートを使用しない場合は、それを取り除くために、独自のフィールドコンストラクターを定義する必要があります。これは、上記でリンクしたPlayヘルプページでも説明されています。ただし、エラーを取り除くだけであれば、非常に簡単です。デフォルトのフィールドコンストラクターコード(上記にもリンクされています)のコピーを作成し、読み取った部分とで@if(elements.hasErrors) {error}始まる3行を変更または削除するだけです。 @elements.errors(elements.lang).map。「必須」エラー自体はから@elements.infos...です。

それとも、このフィールドが必須ではないという問題ですか?これは、ヘルパーではなく、フォーム定義の問題です。Scalaフォームのヘルプページの「オプションの値」に示されているように、フォームの「テキスト」フィールドをオプションにします。たとえば、タスク定義が次の場所にある場合Application.scala

   val taskForm = Form (
     "text" -> optional(text) // changed from 'nonEmptyText'
   )

これにより、「テキスト」フィールドOption[String]がプレーンではなくにマップされStringます。フォームがケースクラス(または他のマッピングロジック)に基づいている場合は、それに応じてフォームを変更する必要があります。

于 2013-02-21T00:50:51.167 に答える