我进行此调用以使用处理程序设置选择:
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>
有什么想法吗?
答案 0 :(得分:0)
发生这种情况的根本原因是Lift选项呈现为每个映射回服务器端值的选项生成一次性值。因此,当您ReplaceOptions
时,您将丢失这些唯一值,并且服务器无法再了解提交的内容。
此处的解决方案是使用ajaxUntrustedSelect
。它将您集合中的值直接传递给HTML,并允许它们按原样提交。它也不会过滤回调以确保提交的选项位于原始列表中。这稍微不那么安全,但允许您像上面一样使用ReplaceOptions
。
另一种可能性是在idMemoize
元素的容器周围使用select
,并在需要更新选择选项时重新呈现idMemoize
。