es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Guardar el valor de autocompletado de celda en SlickGrid.

Tengo una celda de slickgrid con autocompletado y un formateador personalizado. El valor de la celda es un campo clave de la lista de autocompletado que se carga dinámicamente. La lista se muestra como etiquetas (por ejemplo, “Contrato: ABCDEF-123, grosor: 10, ancho: 210, Ciudad: Chicago”) y cuando selecciono una, aparece en el campo de entrada correspondiente. El punto es que el formateador no conoce esa etiqueta, solo conoce la clave (order_id).

La función ‘get_contract_list’ devuelve la lista completa de contratos y es muy grande, por lo que se decidió hacer que esa lista sea dinámica. Por lo tanto, la función ahora está vacía y sería bueno simplemente tomar la etiqueta seleccionada en ‘val’.

¿Hay alguna forma de lograrlo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible lograr esto. Una forma es modificar la función contractFormatter para incluir una función de retorno que se activa cuando se selecciona una etiqueta de la lista de autocompletado. La función de retorno puede entonces actualizar el valor de val con la etiqueta seleccionada.

    Aquí hay una implementación de ejemplo:

    function contractFormatter(row, cell, value, columnDef, dataContext, onLabelSelected) {               
        var res = '';
        var val = '';
    
        // Generar opciones de autocompletado dinámicamente
        var autocompleteOptions = {
            source: function (term, response) {
                // Obtener opciones que coincidan con el término ingresado
                var matches = [];
                var contracts = get_contract_list();
                for (var key in contracts) {
                    var label = contracts[key]['label'];
                    if (label.toLowerCase().indexOf(term.toLowerCase()) >= 0) {
                        matches.push(label);
                    }
                }
    
                // Devolver resultados
                response(matches);
            },
            select: function(event, ui) {
                // Actualizar valor con etiqueta seleccionada
                val = ui.item.label;
                onLabelSelected(val);
            }
        };
    
        // Agregar autocompletado a la celda
        $(`#${columnDef.id}_${row}`).autocomplete(autocompleteOptions);
    
        // Preparar salida del formateador
        res = `<span class="${getSpanClass()}" style="float: left;"></span>\n`;
        if (val === '') {
            res += '<span style="color:slategrey;">Ingrese 3 símbolos</span>';
        } else {
            res += val;
        }
    
        return res;
    }
    

    Tenga en cuenta que la función contractFormatter ahora espera un parámetro adicional llamado onLabelSelected. Esto debería ser una función de retorno que se activa cuando se selecciona una etiqueta de la lista de autocompletado. La opción select del objeto autocompleteOptions es responsable de actualizar el valor de val con la etiqueta seleccionada y activar la función de retorno onLabelSelected.

    También tenga en cuenta que las opciones de autocompletado se generan dinámicamente en función de la función get_contract_list. Esto significa que la lista de autocompletado se actualizará a medida que el usuario escriba.

    ¡Espero que esto sea útil!

Comments are closed.