其中一個原因可能是在scala中xml屬性的笨拙處理。有兩個問題:
- 屬性如「選擇」,其必須是存在或不存在
- 添加屬性的列表來動態等的輸入輔助模板
在平原的一個例子的htmlArgs斯卡拉顯示的困難:
def addAttributes(element: Elem, attributes: Map[Symbol, _ <: Any]): Elem = {
var el = element
for ((key, value) <- attributes) el = el % Attribute(None, key.name, Text(value.toString), Null)
el
}
def multiselect[T](field: play.api.data.Field,
options: Seq[T],
optionValue: T => String,
optionText: T => String,
args: (Symbol, Any)*)(implicit handler: FieldConstructor, lang: play.api.i18n.Lang) = {
val values = { field.indexes.map { v => field("[" + v + "]").value } }
input(field, args: _*) {
(id, name, value, htmlArgs) =>
Html(
addAttributes(
<select id={ id } name={ name } multiple="multiple">
{
options.map { v =>
val z: Option[String] = if (values contains v) Some("selected") else None
<option value={ optionValue(v) } selected={ z map Text }>{ optionText(v) }</option>
}
}
</select>,
htmlArgs).toString)
}
}
to 1)我完全同意模板不應該包含太多的邏輯,但有時候很好,即使是短的代碼部分,所以這個決定應該留給程序員。 – user536322
到2)這是一個很好的觀點。另一方面,我估計80%的實際案例都需要html或xml。另外的19%可能是json,並提供比模板更好的方式。對於其餘的(csv,sql,...),其他方式可能更適合csv庫,對於0.1%的用例,其中一個realy需要非常特殊和複雜的基於文本的模板,我想這可以使用另一個播放模板引擎模塊。 – user536322
到3)scala支持我猜 – user536322