将值闪烁到Play Framework中的<select>元素</select>

时间:2014-06-10 05:44:41

标签: scala playframework playframework-2.0

我意识到选择&#39;的价值。元素无法根据“&#39;值”设置。属性,但通过选择&#39;选择&#39;属性&#39;选项&#39;。

我制作了一个简单的if-else模块,比较闪存值,以便选择&#39;属性在右边&#39;选项&#39;。 但它没有工作,总是去其他地方,即使价值&#39;闪存返回的内容是正确的(&#39;值&#39;选择&#39;在else块中)。

@if(flash.get("""value""") == "value3"){
    <select>
      <option value="value1">value1</option>
      <option value="value2">value2</option>
      <option value="value3" selected>value3</option>
    </select>
}
@if(flash.get("""value""").equals("value2")){
    <select>
      <option value="value1">value1</option>
      <option value="value2" selected>value2</option>
      <option value="value3">value3</option>
    </select>
} else{
    <select value="@flash.get("""value""")">
      <option value="value1" selected>value1</option>
      <option value="value2">value2</option>
      <option value="value3">value3</option>
    </select>
}

实际上有一种方法可以通过Play Framework闪烁来设置值吗?

修改

所以,我尝试使用自定义助手blesior写的。

@myOwnOptionHelper(optionValue: String, optionLabel: String) = {
    <option value = "@optionValue"
    @if(flash.get("""flashValue""") != null && flash.get("""flashValue""") == optionValue) { selected = "selected" } >@optionLabel</option>
}

选择元素

<select>
  @myOwnOptionHelper("value1", "value1")
  @myOwnOptionHelper("value2", "value2")
  @myOwnOptionHelper("value3", "value3")
</select>

结果是,闪烁后没有选择任何选项。 我尝试重写if块并显示flashvalue以便进行测试。

@myOwnOptionHelper(optionValue: String, optionLabel: String) = {
    <option value = "@optionValue"
    @if(flash.get("""flashValue""").isDefined && "value2" == optionValue) { selected = "selected" } >@flash.get("""flashValue""") + @optionLabel</option>
}

它有效。闪烁之后&#34; value2&#34;选择并显示正确的flashValue(例如:&#34; value1 + value2&#34;)。我更改了&#34;!= null&#34; to&#34; .isDefined&#34;用于测试,因为即使没有闪烁发生,也会选择value2。

编辑2

显然flash.get(&#34; flashValue&#34;)是[选项]。这就解释了为什么它没有在第一个地方触发正确的if-else块,因为它返回Some(值)。通过添加一个匹配大小写块,自定义帮助程序可以正常工作。感谢@blesior

@myOwnOptionHelper(optionValue: String, optionLabel: String) = {
    <option value = "@optionValue"
    @if(flash.get("flashValue").isDefined && (flash.get("flashValue") match {
      case Some(x:String) => x
      case _ => ""
    }) == optionValue) { selected = "selected" } >@optionLabel</option>
}

1 个答案:

答案 0 :(得分:0)

嗯,两个错误:

  • 您在这里执行两个区块 - 首先是检查 value3 ,其次是检查 value2 或其他。这意味着,如果您的值为3,您将获得两个选择字段
  • 为什么要重复所有区块中的所有选项?

相反,您可以为option标记编写自定义帮助,这将生成它并根据选项的值检查闪烁值,即使在同一视图中也可以执行此操作,尽管如果它是在标签模板(docs)......

中完成的话会更好
@myOwnOptionHelper(optionValue: String, optionLabel: String)={
    <option value="@optionValue"
        @if(flash.get("myFlashedValue") != null && flash.get("myFlashedValue")==optionValue) { selected="selected"} >@optionLabel</option>
}

<select name="someSelect">
    @myOwnOptionHelper("value1", "One")
    @myOwnOptionHelper("value2", "Two")
    @myOwnOptionHelper("value3", "Three")
    @myOwnOptionHelper("value4", "Four")
    <!-- ... -->
    @myOwnOptionHelper("value1000000", "Million")
</select>

当然帮助者可以获得其他参数,即如果你不想通过flash传递设定值,但是从其他模型中读取它等等。