pequeña formula para hacer un autocomplete "inteligente"

9 views
Skip to first unread message

Nicolas Zuasti

unread,
Aug 23, 2012, 9:10:07 AM8/23/12
to p-s-f
Resulta que para un pequeño sistema que estoy haciendo me pidieron la siguiente funcionalidad. En el abm de clientes se debe seleccionar en que localidad habitan. En base a esto se debe ingresar su dirección (hasta aquí todo estandard). El tema es que la dirección esta compuesta por 3 calles, calle principal, primera lateral, segunda lateral.

La idea es que cada calle usa el jquery autocomplete. Pero este complemento no es muy "inteligente" que digamos, sencillamente pude hacer que tomase el valor del código de la localidad para traer los nombres de calles apropiados. Pero el problema es que podía repetir el mismo nombre de calle para cada una de las tres calles.

Por esta razón debía agregarle funcionalidad al complemeto, por suerte el mismo te permite agregarle una función que devuelva los datos por los que navega y básicamente hice lo siguiente:

autocompletar = (localidad) ->
  if localidad == '' or localidad == 0
    localidad = $('#adherente_localidad_id').val()

  $('#adherente_calle_principal_nombre').autocomplete
    source: (request, response) ->
      traer_datos(request, response, 'calle_principal', localidad)      
    minLength: 2
    autoFocus: true
    select: (event, ui) ->

traer_datos = (request, response, campo, localidad) ->
  url = "/calles/#{localidad}/por_localidad_y_nombre"
  calle_principal = $('#adherente_calle_principal_nombre').val()
  primera_lateral = $('#adherente_primera_lateral_nombre').val()
  segunda_lateral = $('#adherente_segunda_lateral_nombre').val()
  $.ajax
    url: url,
    data:
      term: request.term
      campo: campo
      calle_principal: calle_principal
      primera_lateral: primera_lateral
      segunda_lateral: segunda_lateral
    success: (data) ->
      response(data)


El servidor se encarga de hacer la búsqueda correcta y me devuelve los datos ya filtrados según los requerimientos. 

La única contra de esto es que tengo que repetir el código del autocomplete para cada calle, ya que parte de la lógica involucra identificar correctamente el elemento en donde se esta ejecutando el autocomplete (y el mismo no da esa funcionalidad). O sea debería repetir este código para cada calle:

  $('#adherente_calle_principal_nombre').autocomplete
    source: (request, response) ->
      traer_datos(request, response, 'calle_principal', localidad)      
    minLength: 2
    autoFocus: true
    select: (event, ui) ->

De igual forma, es poco código a repetir y la funcionalidad para el cliente queda 100% satisfecha.

Espero que les sirva de algo (a mi ya me queda de ayuda-memoria). Saludos!

A.P. Nicolás Zuasti
@zonical.net/cv
Wild Dog Games

Reply all
Reply to author
Forward
0 new messages