3

我正在使用 Play 2.0.4 和

helper.options(myitems)

在我的模板中(在 helper.select 内)

在这种情况下,我如何定义默认选择的条目,它应该是其中的一个条目myitems?感谢您的任何提示!

关于我的案例的更多信息:

想象一个新闻档案,显示所有新闻标题。此新闻存档使用分页,分页使用 GET 传递下一个/上一个页码。

然而,播放框架只会在使用 POST 请求时正确选择当前选择的“选择”项目(这里:新闻类别) - 而分页使用 GET!

预期行为:在应用过滤器/选择特定新闻类别时,通过在“选择”表单中预选当前选择的新闻类别,用户始终可以看到此内容。

用于说明的“屏幕截图”:

在此处输入图像描述

那么,任何人都知道如何应对这个问题?有什么方法可以手动告诉 Play 它应该从“选择”表单中选择哪个条目?'_default 总是添加一个新条目,而不是从给定的选项中选择一个):如果不必手动构建完整的“选择”表单,那就太好了。

4

4 回答 4

3

尝试将'_default选项传递给select助手:

@import views.html.helper._

@select(form("email"), options(List("first", "third")), '_default -> "second")

不幸的是,似乎唯一的办法就是查找source

更新:

指定_default属性不会在标签上设置selected属性。option看起来预选条目的唯一方法是将预填充的表单传递给模板。例如,假设您有以下表格:

case class RegInfo(email: String, color: String)

private val registrationForm = Form(
  mapping(
    "email"    → email,
    "color"    → nonEmptyText(minLength = 5, maxLength = 32)
  )(RegInfo.apply)(RegInfo.unapply)
)

然后在传递给视图之前的动作预填充表单中:

def create = Action {
  Ok(html.create(registrationForm.fill(RegInfo("user@qwe.com", "blue"))))
}

然后在模板中使用助手:

@select(form("color"), options(List("red", "green", "blue")))

并且值将被预先选择。

于 2012-12-29T16:07:03.840 回答
0

实际上,有一个更好的解决方案。如果您调用具有部分绑定表单的模板,您将实现您的目标。这是您的控制器的代码:

Ok(views.html.myForm(myForm.bind(
             Map("fieldName1" -> "value1",
                 "fieldName2" -> "value2"))))

确保将字段名映射到要预选的values 中的s。option

于 2013-03-10T00:39:05.697 回答
0

最后采用务实的方法:

<select id="myfield" name="myfield" >

    <option class="blank" value="">-- All items --</option>

    @for((key, value) <- MyModel.options) {

        @if(key == GETValuePassedToTemplate) {
            <option value="@key" selected>@value</option>   
        } else {
            <option value="@key">@value</option>                            
        }
    }

</select>   

仍然想知道是否有更好的选择/方法来做到这一点。

于 2012-12-31T12:35:30.710 回答
0

仍然想知道是否有更好的选择/方法来做到这一点。

好吧,如果你不是很想用 play 来解决这个特定的问题,你总是可以使用 JavaScript 和 jQuery 来解决它:

$(function () {    
    $('#yourSelect_id').val(5);
}

您选择的选项每个都有值,而您希望预先选择的一个选项的值是 5。

于 2014-09-10T08:56:59.487 回答