Scala 提升替换选项会导致选择丢失操作
我进行此调用是为了使用处理程序设置select:Scala 提升替换选项会导致选择丢失操作,scala,lift,Scala,Lift,我进行此调用是为了使用处理程序设置select: val options:List[(String,String)] = List(("1","test"),("2","test2")) "#drugSelect" #> ajaxSelect(drugOptions, Empty, handler) 此时,我可以在列表中选择一些内容,并调用处理程序。稍后,我打这个电话来替换选项。这些选项被替换得很好 val options:List[(String,String)] = List(("
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>
选择药物:
信息
有什么想法吗?发生这种情况的根本原因是提升选项渲染为每个选项生成一个一次性值,该值映射回服务器端值。因此,当您
ReplaceOptions
时,您将丢失这些唯一值,服务器将无法理解提交的内容
这里的解决方案是使用ajaxUntrustedSelect
。它将集合中的值直接传递到HTML,并允许按原样提交它们。它也不会过滤回调以确保提交的选项位于原始列表中。这稍微不太安全,但允许您像上面那样使用ReplaceOptions
另一种可能是在
select
元素的容器周围使用idMemoize
,并在需要更新选择选项时重新渲染idMemoize
。发生这种情况的根本原因是,提升选项渲染为每个选项生成一个一次性值,该值映射回服务器端值。因此,当您ReplaceOptions
时,您将丢失这些唯一值,服务器将无法理解提交的内容
这里的解决方案是使用ajaxUntrustedSelect
。它将集合中的值直接传递到HTML,并允许按原样提交它们。它也不会过滤回调以确保提交的选项位于原始列表中。这稍微不太安全,但允许您像上面那样使用ReplaceOptions
另一种可能是在select
元素的容器周围使用idMemoize
,并在需要更新select选项时重新呈现idMemoize