2

Play Framework ビューで HTML フィールドをレンダリングするには、プロパティ名を文字列として使用する必要があります。

スカラ:

case class MyClass(myField: Int)

意見:

@(form: Form[MyClass])
...
@helper.inputText(form("myField"), '_label -> "Field Title")

これは強く型付けされていません!

では、強く型付けされた方法でフィールド名に言及する方法はありますか? このような:

@helper.inputText(form(model => model.myField), '_label -> "Field Title")

これは Scala で可能であると確信していますが、幸いにもマクロがあり、そのようなコードは実行時のオーバーヘッドなしで実装できます。

4

1 に答える 1

2

Form は主にオブジェクトではなくフォームをモデル化するため、文字列をプロパティの名前としてではなく、文字列であるフォーム フィールド id/name と考えないでください(次のようにタプルを使用してフォームをモデル化することは可能であり、非常に便利ですらあります)。データ構造など)。そこには文字列以外は何も送信できないため、これは確かに強く型付けされています。

しかし、あなたの問題は、型システムをさらに使用して、実際の値を型または何か間違ったスペルを避けるために何かとしてエンコードしたいということです.

さまざまな利点と問題を伴ういくつかのアプローチがあると思います。

  • 独自のフォーム API を作成し、型システムを使用してフィールド ID を何らかの方法で識別します
  • 型システムを使用するのではなく、プロジェクトのキーとして定数を使用することを強制しますが、そのようにすることを決定します
  • フォームビルダー用の独自のラッパーと、より制限されたタイプをキーとして受け入れるフォームヘルパーを作成します
  • モデル フィールドをある種の「プロパティ」タイプとして表現し、それをフォーム ビルダーおよびフォーム ヘルパーのカスタム ラッパーと組み合わせます。

これらはどちらも実際には組み込まれておらず、定数アプローチ以外は多かれ少なかれ複雑なコードを書かなければならないので、この問題を解決することの実際の利益があなたにとって価値があるものと比較検討する必要があります。

幸運を!

于 2013-10-11T09:49:09.620 に答える