2012-03-29 19 views
7

estoy viendo el tutorial autocompletar, y tengo algunas preguntas: http://jqueryui.com/demos/autocomplete/#option-disabled¿Cuáles son los argumentos de "respuesta" y "solicitud" en la devolución de llamada de "origen" de JQuery UI Autocomplete?

$("#tags") 
      // don't navigate away from the field on tab when selecting an item 
      .bind("keydown", function(event) { 
       if (event.keyCode === $.ui.keyCode.TAB && 
         $(this).data("autocomplete").menu.active) { 
        event.preventDefault(); 
       } 
      }) 
      .autocomplete({ 
       minLength: 0, 
       source: function(request, response) { 
        // delegate back to autocomplete, but extract the last term 
        response($.ui.autocomplete.filter(
         availableTags, extractLast(request.term))); 
       }, 
       focus: function() { 
        // prevent value inserted on focus 
        return false; 
       }, 
       select: function(event, ui) { 
        var terms = split(this.value); 
        // remove the current input 
        terms.pop(); 
        // add the selected item 
        terms.push(ui.item.value); 
        // add placeholder to get the comma-and-space at the end 
        terms.push(""); 
        this.value = terms.join(", "); 
        return false; 
       } 
      }); 

por lo que entiendo los parámetros para la fuente es request y response. ¿Son estas palabras clave reservadas? No pude encontrar nada al escribir esto en google. No estoy seguro de cuál es la solicitud y la respuesta que se transmite aquí. ¿La solicitud solo está captando la entrada? ¿Dónde puedo leer más sobre esto?

+0

Me consola de registrar muchos de los console.log (respuesta). Entonces podrías ver cuáles son los objetos. Además, console.log (tipo de respuesta) también podría ayudarlo. – mikevoermans

Respuesta

15

request y response son simplemente los nombres que el autor del código ha elegido para dar a los dos parámetros formales de la devolución de llamada asignados a la opción source del widget de autocompletar:

autocompletar puede ser personalizado para trabaje con varias fuentes de datos, simplemente especificando la opción de origen. Una fuente de datos puede ser:

  • una matriz con datos locales
  • una cadena, la especificación de un URL
  • una devolución de llamada

La tercera variación, la devolución de llamada, proporciona la mayor flexibilidad, y se puede utilizar para conectar cualquier fuente de datos a Autocompletar. La devolución de llamada recibe dos argumentos:

  • Un objeto de la petición, con un solo propiedad llamada "expresión", que se refiere al valor actualmente en la entrada de texto. Por ejemplo, cuando el usuario ingresó "nuevo yo" en un campo de ciudad, el término Autocompletar será igual a "nuevo yo".
  • Una devolución de llamada de respuesta, que espera un único argumento en contiene los datos para sugerir al usuario. Esta información debe filtrarse según el término proporcionado, y puede encontrarse en cualquiera de los formatos descritos arriba para datos locales simples (String-Array o Object-Array con label/value/both properties). Es importante cuando se proporciona una devolución de llamada de origen personalizada para manejar los errores durante la solicitud. Siempre debe llamar al la devolución de llamada de respuesta incluso si encuentra un error. Este garantiza que el widget siempre tenga el estado correcto.
0

Es claramente documentados en la página de autocompletar jQuery UI.

http://jqueryui.com/demos/autocomplete/

La tercera variación, la devolución de llamada, proporciona la mayor flexibilidad, y puede utilizarse para conectar cualquier fuente de datos a Autocomplete. La devolución de llamada obtiene dos argumentos:

Un objeto de solicitud, con una única propiedad llamada "término", que hace referencia al valor actualmente en la entrada de texto. Por ejemplo, cuando el usuario ingresó "nuevo yo" en un campo de ciudad, el término Autocompletar será igual a "nuevo yo".

Una devolución de llamada de respuesta, que espera un único argumento en contiene los datos para sugerir al usuario. Esta información debe filtrarse según el término proporcionado, y puede encontrarse en cualquiera de los formatos descritos arriba para datos locales simples (String-Array o Object-Array con label/value/both properties). Es importante cuando se proporciona una devolución de llamada de origen personalizada para manejar los errores durante la solicitud. Siempre debe llamar al la devolución de llamada de respuesta incluso si encuentra un error. Este garantiza que el widget siempre tenga el estado correcto.

+3

No creo que esté claramente documentado. Es bastante incomprensible si no estás acostumbrado a la semántica de jQuery. –

+0

Hay una serie de publicaciones en SO que dicen que tal y tal jQuery facility/idea/assumption/what-have-you está claramente documentada en tal y tal página. El problema es que estos bits de documentación están ocultos dentro de varias capas de redirección y, lo que es peor, la URL de documentación en el sitio de jQuery no se actualiza cuando se hace clic en algo. En este caso (de la respuesta anterior), si hace clic en el enlace mencionado en la respuesta, no proporciona la información. Luego debe hacer clic en "Documentación API" y luego buscar "devolución de llamada" para llegar al texto de la respuesta antes mencionada. – Sonny

24

No, request o response palabras clave no están reservados – si lo fueran, que podrían no los utilizan como nombres de los parámetros de función ..

¿Qué está pasando aquí es bastante sencilla, y si alguna vez hace nada en Node verás el patrón. Es async JavaScript.

Está pasando una función anónima al source. Esta función se invoca cuando el autocompletar necesita consultar el origen de datos (en otras palabras, el usuario escribió algo).

Los parámetros de la función son request y response. request es simplemente la solicitud de autocompletar información; request.term es la consulta (lo que el usuario tipeó). Depende de usted cómo implementar la búsqueda –, tal vez tenga una variable local con posibilidades o puede realizar una llamada AJAX al servidor.

Ahora la parte importante: si está haciendo una llamada AJAX, no puede simplemente return un valor de source() porque la función volverá mucho antes de que se complete la llamada AJAX. Es por eso que hay un parámetro response.

response es una referencia de función pasada a su función source() a la que llama cada vez que tiene la respuesta a la solicitud. A través de la magia de los cierres, puedes llamar a esta función desde dentro de una devolución de llamada AJAX.

response (que podría menos confusamente ser nombrado callback) espera una matriz de cadenas o de objetos con label y value propiedades. Mostrará esos resultados en el menú desplegable Autocompletar.

Poniendo todo junto:

$('selector').autocomplete({ 
    ... 
    source: function(request, response) { 
     // calculate results for a query. 
     response([{ label: 'Example', value: 'ex' }]); 
    } 
}); 
Cuestiones relacionadas