Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 提升替换选项会导致选择丢失操作_Scala_Lift - Fatal编程技术网

Scala 提升替换选项会导致选择丢失操作

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(("

我进行此调用是为了使用处理程序设置select:

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