Me gustaría utilizar un autocompletar con ajax. Así que mi objetivo es tener:Levante - Autocompletar con Ajax Envío
Cuando el usuario escribe algo en el campo de texto, algunas sugerencias proporcionadas por el servidor aparece (Tengo que encontrar sugerencias en una base de datos)
cuando el usuario presiona "enter", hace clic en otro lugar que no sea en el cuadro de autocompletar, o cuando selecciona una sugerencia, la cadena en el campo de texto se envía al servidor.
primera vez que trató de utilizar el widget de autocompletar proporcionada por ascensor, pero me enfrentaba a tres problemas:
- que está destinado a ser un selecto extendida, es decir que puede originalmente sólo presentar valores sugeridos .
- no está destinado a ser utilizado con ajax.
- se pone defectuoso cuando se combina con
WiringUI
.
Entonces, mi pregunta es: ¿Cómo puedo combinar jquery autocomplete e interactuar con el servidor en ascensor? Creo que debería usar algunas devoluciones de llamada pero no las domino.
Gracias de antemano.
ACTUALIZACIÓN He aquí una primera implementación Lo intenté, pero la devolución de llamada no funciona:
private def update_source(current: String, limit: Int) = {
val results = if (current.length == 0) Nil else /* generate list of results */
new JsCmd{def toJsCmd = if(results.nonEmpty) results.mkString("[\"", "\", \"", "\"]") else "[]" }
}
def render = {
val id = "my-autocomplete"
val cb = SHtml.ajaxCall(JsRaw("request"), update_source(_, 4))
val script = Script(new JsCmd{
def toJsCmd = "$(function() {"+
"$(\"#"+id+"\").autocomplete({ "+
"autocomplete: on, "+
"source: function(request, response) {"+
"response("+cb._2.toJsCmd + ");" +
"}"+
"})});"
})
<head><script charset="utf-8"> {script} </script></head> ++
<span id={id}> {SHtml.ajaxText(init, s=>{ /*set cell to value s*/; Noop}) } </span>
}
Así que mi idea era:
- para obtener el resultado seleccionado a través de un campo
SHtml.ajaxText
cuales se wraped en un campo de autocompletar - para actualizar las sugerencias de autocompletado utilizando una función de JavaScript
Hola, lamentablemente no puedo usar Lift 2.5. Estoy en el ascensor 2.4 M4. Sin embargo, por lo que ya he usado, parece que ya hay callbacks implementados en 2.4. Gracias por tu respuesta. –
Actualicé mi pregunta con el momento en que estoy bloqueado, cualquier sugerencia es bienvenida. –
No estoy seguro de a qué se refiere cuando dice que la devolución de llamada no funciona. ¿Se ejecuta update_source? Si es así, su problema es probable con su devolución. Está realizando una llamada asincrónica, por lo que solo devolver el JSON no es suficiente, el navegador no sabrá qué hacer con él. Tendrá que devolver un JsCmd que realice una acción, y el resultado de esa acción debería ser la población de la autocompletar de JQuery UI. –