18

Play2.0のフォーム検証とフォームヘルパーにはまだ苦労しています。このログイン画面は、TwitterBootstrapと一緒に使用しています。したがって、私のログインフォームは次のようになります。

    @helper.form(routes.Application.authenticate, 'class -> "form-horizontal") {
    <fieldset>
    <legend>@Messages("login")</legend>

            @if(loginForm.hasGlobalErrors) { 
                <div class="alert alert-error">
                <a class="close" data-dismiss="alert">×</a>
                    @loginForm.globalError.message
                </div>
            }
            @if(flash.contains("success")) {
                <div class="alert alert-success">
                <a class="close" data-dismiss="alert">×</a>
                    @flash.get("success")
                </div>
            }

            @inputText(loginForm("email"), '_label -> "Email")
            @inputText(loginForm("password"), '_label -> Messages("login.password"))


            <div class="form-actions">
                <button type="submit" class="btn btn-success">@Messages("button.doLogin")</button>
                @Messages("or")
                <a class="btn btn-warning" href="routes.LandingPage.index">@Messages("button.doCancel")</a>
            </div>              
    </fieldset>
    }

そして、私のTwitterブートストラップフィールドは次のようになります。

@(elements: helper.FieldElements)

@**************************************************
* Generate input according twitter bootsrap rules *
**************************************************@
<div class="control-group @if(elements.hasErrors) {error}">
    <label class="control-label" for="@elements.id">@elements.label</label>
    <div class="controls">
        @elements.input
        <span class="help-inline">@elements.infos.mkString(", ")</span> 
    </div>
</div>    

これは出力です:

ログイン画面

私が理解していないこと:

1、ヘルプテキストが常に表示されるのはなぜですか(入力フィールドの右側)

ヘルプテキストはから来てい@elements.infos.mkString(", ")ます。したがって、この行を削除すると、ヘルプテキストが削除されます。または、空の文字列を渡して、ヘルプテキストが表示されないようにすることもできます。'_help -> ""

2、エラーが発生した場合にヘルプテキストのみを表示するにはどうすればよいですか?

このコードを使用すると、ヘルプテキストを追加できます。@elements.errors(elements.lang).mkString(", ")

3、入力テキストフィールドに渡すことができるパラメータは何ですか?クラス名も渡したいのですが、どうしたらいいのかわかりません...

渡すカスタム引数(つまり、クラスまたはプレースホルダー)を定義できます。class="@elements.args.get('_class)次に、次のように渡すことができます。'_class -> "classname"

implicitFieldConstructors4、1つのテンプレートパーツに複数を定義できますか?チェックボックスについては、入力ボックスやテキストエリアと比較して別のfieldConstructorが必要ですが、これを行うにはどうすればよいですか?

この例:コンピューターデータベースのサンプルでは、​​Twitterブートストラップフィールドが定義されていますが、次のように使用されます。

@inputText(loginForm("email"), '_label -> "Email")

ここでの名前が単に入力ではなくinputTextであるのはなぜですか?input.scala.htmlもあるので?

それで、チェックボックスのフィールドハンドラーを作成したい場合、これをどのように使用しますか?次の形式でエラーが発生します。

@checkBoxHandler = @{ FieldConstructor(s2ftheme.constructors.checkbox.render) }
@checkbox(loginForm("remember"), '_label -> Messages("login.remeberme"))(handler = implicitFieldConstructor)

エラーメッセージが表示されます:

not enough arguments for method apply: (implicit handler: views.html.helper.FieldConstructor, implicit lang: play.api.i18n.Lang)play.api.templates.Html in object checkbox. Unspecified value parameter lang.

私はここでコンセプトが欠けていると思います...ありがとう。

4

3 に答える 3

10

情報テキストはから来てい@elements.infos.mkString(", ")ます。エラーを表示するには、@elements.errors(elements.lang).mkString(", ")代わりにを使用する必要があります。

情報の内容を変更するための正しいパラメーターは役立つでしょう(これは少し一貫性がありません。これを実現するにはソースを読む必要があります)。したがって、組み込みのブートストラップフィールドを使用したいが情報を抑制したい場合は、を渡し'_help -> ""ます。

#4の編集:

特定のチェックボックスを呼び出す方法は次のとおりです。

@checkbox(loginForm("remember"), '_label -> Messages("login.remeberme"))(handler = implicitFieldConstructor, implicitly[Lang])

はい、@inputという意味のテンプレートがありinput.scala.htmlます。これは、すべての入力ヘルパーの基本的なテンプレートです。

これが機能する理由と方法を理解するには、Play 2.0とScala(特に暗黙の引数)をもう少し深く掘り下げる必要があります。

于 2012-04-18T15:03:53.587 に答える
1
  1. この行のため<span class="help-inline">@elements.infos.mkString(", ")</span>。そこにフィールドに関する情報を表示しています。情報を表示しないように削除します。
  2. このコードを追加します:

    @if(elements.hasErrors) {
        <span class="help-inline">@elements.infos.mkString(", ")</span> 
    }
    
  3. クラス名を設定するには:これをTwitterBootstrapフィールドに追加しますclass="@elements.args.get('_class)。そして、ログインフォームに次のようなクラスパラメータを追加します。@inputText(loginForm("email"), '_label -> "Email", '_class -> "classname")

概念を理解するには、ソースコードを見てください:https ://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/views/helper/defaultFieldConstructor.scala.html

于 2012-04-18T15:08:12.367 に答える
0

私はエラーを表示するために同じ戦いにいます:)今のところ私は使用しています:

<span class="errors badge badge-important">@elements.errors.mkString(", ")</span>

エラーがなければそれは隠されているでしょう、これを見てください:http ://twitter.github.com/bootstrap/components.html#labels-badges

しかし、それでも「必須」をポルトガル語に翻訳する方法を探しています。

于 2013-02-03T20:30:59.603 に答える