1

私はかなり Java に精通したコーダーで、Play2 フレームワークに取り掛かります。

私は小さなテンプレートを定義していますが、名前付きパラメーターをテンプレートに渡す方法として「オプション」を使用するのは良さそうだと思いました。

したがって、私のテンプレート (picker.scala.html など) では、これらのパラメーターを使用しています。

@(field: Field, label: String, options: Seq[(String, String)])

そして、私がそれを使用しているページで私はやっています

@picker(myForm("shoesize"), "Your Shoe Size", options("color" -> "black"))

質問: 「ピッカー」テンプレートのオプションはどのように処理すればよいですか? options.get("color") のようなことはできますか?

関連するドキュメントへのポインタが含まれている場合、「RTFM」は完全に有効な答えです...

編集: @options.get(0)._2 などを実行できることがわかりました。オプションを使用するポイントがありませんか? 文字列、文字列のペアのシーケンスではなく、名前付きパラメーターのマップを渡すより良い方法はありますか?

解決済み

以下の回答のおかげで、これが私がやったことです:

私の「ピッカー」テンプレートには、次の署名があります。

@(field: Field, 
  label: String, 
  options: Seq[(String, String)]=scala.collection.immutable.List())

つまり、options パラメータのデフォルトは空のリストなので、オプションは... まあ、オプションです。

次に、ピッカー テンプレートで、次のような「クリア可能な」オプションを探します。

@if(options.toMap.get("clearable").getOrElse("false")=="true"){
    clearable is true
} else {
    clearable is not true
}

ピッカーを呼び出すと、次のことができます

@picker(myForm("myField"), "Some Label")

また

@picker(myForm("myField"), "Some Label", options("clearable" -> "true))

これが誰にも役立つかどうか、またはそれを行うためのより良い方法があるかどうかはわかりませんが、それは私が望んでいたものであり、機能します.

4

2 に答える 2

2

キーから値にアクセスする必要がある場合は、 のMap[String, String]代わりにを使用する方が簡単Seq[(String, String)]です。

コードでは、次のようになります。

@(field: Field, label: String, options: Map[String, String])

@picker(myForm("shoesize"), "Your Shoe Size", Map("color" -> "black"))

次に、次を使用して値にアクセスできます。

@options("color")

またはマップを反復処理します:

@for((key, value) <- options) {
  @key - @value
}

メソッドを使用してSeq[(String, String)]a を a に変換できることに注意してください(例: )Map[String, String]toMapoptionsSeq.toMap

于 2013-09-13T08:23:28.030 に答える
1

Seqこの場合、あなたが望むものではありません。あなたは本当に を探していMapます。

@(field: Field, label: String, options: Map[String, String])

Map("color" -> "black") を Thing に渡したとしますpicker。したがって、次のように書くことができます。

val color = options.get("color") //returns an Option[String]
color match {
  case Some(value) => System.out.println(value)
  case None => System.out.println("no value")
}

または、次のように書くこともできます。

val color = options.getOrElse("color", "default color")

Seq[(String, String)] で機能しない理由は、(String, String) がtuple大まかに次のようになるためです。

class Tuple2[A, B](_1: A, _2: B)

つまり、一連のオブジェクトを作成しているだけです。ASeqは、ListJava と比較して に似た構造です。ListJavaでは、アイテム ID を渡してからアイテムを取得することはできませんよね? :)

于 2013-09-13T08:26:18.150 に答える