Formateador dinámico JqGrid colModel

My jqGrid trabajar dinámicamente. Para que todas las opciones también se carguen dinámicamente. Estas opciones se generan con java. Map<String,Object> Todas las opciones funcionan muy bien, pero el nombre de la función dentro de map/opts no trabajo. Esto es json mapa generado con java.

"colModel":[...{"formatter":"myFunction","index":"","name":""}]

No depuré el jqgrid.src.js todavía y creo que el problema está en el eval. no se llama a "myFunction" y se devuelve lo indefinido.

preguntado el 22 de mayo de 12 a las 20:05

Su pregunta es un poco difícil de seguir, pero si tiene problemas con el formateador, debería poder definirla como "formatter":myFunction y entonces myFunction se llamará cuando la cuadrícula necesite formatear esa columna. pero mencionas eval... ¿algo más está pasando aquí? -

Las opciones están en HashMap . Mapa opciones = nuevo HashMap (); opts.put("formateador","miFuncion"); opts.put("índice",""); opts.put("nombre",""); Luego, el formateador de opciones para la salida de colModel: {"formateador":"miFunción","índice":"","nombre":""} -

esta es la función en el archivo js. function myFunction(cellvalue, options, rowObject){ return " Haga clic aquí "; } No sé por qué jqGrid no llama a myFunction. Con i get the opts that a show above and put on the reall file it work; Aquí funciona colModel:[ ... {"formatter":myFunction,"index":"","name":""} //work ], Aquí no funciona colModel:[ ... {"formatter":"myFunction ","index":"","name":""} // preste atención: myFunction con cadena en el archivo real tampoco funciona. ], -

Bueno, todas las opciones en jqGrid funcionan bien. -

1 Respuestas

La formatter La opción puede ser una cadena si es uno de los formateadores predefinidos, pero según el Documentos jqGrid para formateadores personalizados:

Puede definir su propio formateador para una columna en particular. Por lo general, esta es una función.

Entonces jqGrid espera que se pase una función. Esta es la razón por myFunction funciona pero "myFunction" no. De todos modos, para resolver su problema, necesita generar el código:

"formatter": myFunction


Para profundizar un poco más, puede ver en el archivo fuente de jqGrid grilla.base.js que el formateador usa una función directamente, pero si se pasa una cadena, esa cadena se pasa a $.fn.fmatter:

    formatter = function (rowId, cellval , colpos, rwdat, _act){
        var cm = ts.p.colModel[colpos],v;
        if(typeof cm.formatter !== 'undefined') {
            var opts= {rowId: rowId, colModel:cm, gid:ts.p.id, pos:colpos };
            if($.isFunction( cm.formatter ) ) {
                v = cm.formatter.call(ts,cellval,opts,rwdat,_act);
            } else if($.fmatter){
                v = $.fn.fmatter(cm.formatter, cellval,opts, rwdat, _act);
            } else {
                v = cellVal(cellval);
            }
        } else {
            v = cellVal(cellval);
        }
        return v;
    },

Si esa función no está ya presente en jquery.fmatter.js entonces esperaría que ocurriera un error cuando la cuadrícula intente usarlo.

contestado el 22 de mayo de 12 a las 21:05

Si hombre. Para usar la función entre comillas, podemos formatear el módulo para que pueda extenderse fácilmente. Más detalles sobre la creación de la función de formateador común - user1404404

Entonces... ¿esto respondió a tu pregunta? - justin ethier

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.