2017-03-16 4 views
1

ich diesen Anruf eine Auswahl mit einem Handler einzurichten:Aufzug ReplaceOptions Ursachen Aktion auswählen verlieren

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

An dieser Stelle ich etwas in der Liste auswählen und die Prozedur aufgerufen wird. Später mache ich diesen Aufruf, um die Optionen zu ersetzen. Die Optionen werden gut ersetzt.

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

jedoch einmal rufe ich ReplaceOptions, der Rückruf an den Handler nicht mehr auftritt, wenn ich in dem Auswahlfeld auswählen. Das HTML sieht so aus:

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

Irgendwelche Ideen?

Antwort

0

Der Grund dafür ist, dass das Rendering der Lift-Option für jede Option einen einmaligen Wert generiert, der auf Ihren serverseitigen Wert zurückversetzt wird. Wenn Sie also ReplaceOptions verlieren, verlieren Sie diese eindeutigen Werte und der Server kann den übermittelten Inhalt nicht mehr verstehen.

Die Lösung hier ist ajaxUntrustedSelect zu verwenden. Sie übergibt die Werte in Ihrer Sammlung direkt an den HTML-Code und ermöglicht deren direkte Übergabe. Callbacks werden nicht gefiltert, um sicherzustellen, dass die übermittelten Optionen in Ihrer ursprünglichen Liste enthalten sind. Dies ist etwas weniger sicher, aber Sie können ReplaceOptions verwenden, wie Sie oben tun. Die andere Möglichkeit besteht darin, einen idMemoize um den Container des Elements select zu verwenden und das idMemoize erneut zu rendern, wenn Sie die Auswahloptionen aktualisieren müssen.

Verwandte Themen