Lift ReplaceOptions导致select失去操作

时间:2017-03-16 22:07:04

标签: scala lift

我进行此调用以使用处理程序设置选择:

val options:List[(String,String)] = List(("1","test"),("2","test2")) 
"#drugSelect" #> ajaxSelect(drugOptions, Empty, handler)

此时我可以在列表中选择一些内容并调用处理程序。稍后,我进行此调用以替换选项。选项被替换得很好。

val options:List[(String,String)] = List(("3","test"),("4","test2"))
ReplaceOptions("drugSelect", options, Empty)

但是,一旦我调用了ReplaceOptions,当我在select字段中选择时,不会再发生对处理程序的回调。 html看起来像这样:

<div data-lift="marketplace.AutoComplete.getNames">
     <input id="drugSearch" type="text" class="input-large">
     <div>
         <label for="drugSelect">Select Drug:</label>
         <select id="drugSelect"></select>
     </div>
     <div id="drugMessage">Messages</div>
</div>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

发生这种情况的根本原因是Lift选项呈现为每个映射回服务器端值的选项生成一次性值。因此,当您ReplaceOptions时,您将丢失这些唯一值,并且服务器无法再了解提交的内容。

此处的解决方案是使用ajaxUntrustedSelect。它将您集合中的值直接传递给HTML,并允许它们按原样提交。它也不会过滤回调以确保提交的选项位于原始列表中。这稍微不那么安全,但允许您像上面一样使用ReplaceOptions

另一种可能性是在idMemoize元素的容器周围使用select,并在需要更新选择选项时重新呈现idMemoize