0

我正在创建一个自定义 HTML 来获取电话号码的输入。这应该是一个带有电话类型选择框和电话号码文本框的控件组。布局需要不同于使用内置 HTML 帮助器 @select 和 @inputText 完成的布局。所以我的代码如下所示:

@phoneGroup(field: Field, className: String = "phone") = {
  <div class="control-group">
    <label class="control-label" for="@field("type").id">@Messages("company.phoneNumbers")</label>
    <div class="controls">
      <select id="@field("type").id" name="@field("type").name">
        @options(models.PhoneType.options)
      </select>
      <input type="text" id="@field("number").id" name="@field("number").name" value="@field("number").value">
    </div>
  </div>
}

我在我的模板中如下调用它:

@repeat(companyForm("phones"), min = 2) { phone =>
  @phoneGroup(phone)
}

在生成的 HTML 中,到目前为止,除了由

@options(models.PhoneType.options)

这是生成的 HTML:

<div class="control-group">
  <label class="control-label" for="phones_0__type">Phone numbers</label>
  <div class="controls">
    <select id="phones_0__type" name="phones[0].type">
      (MAI,Main)(MOB,Mobile)(FAX,Fax)(CUS,Custom)
    </select>
    <input type="text" id="phones_0__number" name="phones[0].number" value="">
  </div>
</div>

显然,@options 只是输出我在 models.PhoneType.options 中传递给它的 Map 的字符串表示形式。所以问题是,我如何使用@options helper 来生成以下 HTML:

<option value="MAI">Main</option>
<option value="MOB">Mobile</option>
<option value="FAX">Fax</option>
<option value="CUS">Custom</option>

我是一名 Java 程序员,我对 Scala 没有任何经验。这可能是一件微不足道的事情,但我没有找到任何例子。

先感谢您。- 德米特里

2013-11-07 更新 - 在下面的“答案”部分中发布了解决方案

4

2 回答 2

0

@options 只是一个对象,不处理 HTML 本身的输出。这是在您传入选项对象的“选择”助手中完成的。如果你不能使用@select,你可以从源代码中复制相关位,https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/views/助手/select.scala.html

于 2013-09-21T16:30:34.863 回答
0

谢谢你的线索,大卫。我没有使用@select 的原因是它还会在选择标签周围生成一些格式化HTML,我想控制布局组件。由于我没有弄清楚如何正确自定义@select,所以我现在就走了这条路。好的,正如你所建议的,我刚刚复制了选项 Scala 代码,它成功了:

<select id="@field("type").id" name="@field("type").name" class="input-small">
    @options(models.PhoneType.options).map { v =>
        <option value="@v._1" 
            @if(Some(v._1) == (field("type").value)) { selected  }>@v._2</option>
    }
</select>

唯一的问题是,我不得不在 inputRadioButtonGroup 代码中使用 Some(v._1) (https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/views/helper /inputRadioGroup.scala.html),否则比较不起作用。我必须学习一点 scala 才能理解为什么会这样:)

或者,for 循环也可以工作,如下所示:

<select id="@field("type").id" name="@field("type").name" class="input-small">
    @for((value, text) <- models.PhoneType.options) {
        <option value="@value" 
            @if(Some(value) == (field("type").value)) { selected  }>@text</option>
    }
</select>
于 2013-11-07T21:17:49.947 回答