2010-11-01 11 views
7

gente,EXTJS Problema de tienda con valores nulos - useNull: no tiene ningún efecto - ¿Ayuda?

que tienen un componente de cuadro combinado respaldado por una JSONStore. Los datos cargados en la tienda devuelven nulo para el valor del combobox. El valor es un int. El proceso de decodificación JSON está convirtiendo el valor nulo en cero; provocando que el cuadro combinado no se visualice cuando intenta encontrar el pk, cero que no existe en su almacén de respaldo.

He encontrado la opción useNull: config para data.Field objects, actualicé a 3.3.0 Final y configuré mi valor int para que combobox useNull: true. Esto no está teniendo ningún efecto en absoluto, desafortunadamente. El valor decodificado todavía se cambia de nulo a cero.

¿Alguna idea sobre cómo no establecer el campo en cero cuando los datos para un campo JSON son nulos?

Aquí hay una foto de lo que está pasando. Observe los datos: el valor es cero, pero el valor JSON es nulo.

Gracias!

(! Gah reputación stoopid < 10 así que no puedo publicar directamente la Imagen Ver aquí:. debug pic)

También, aquí está config campo de mi tienda:

fields: [ 
     {name:"id", type:"int"}, 
     {name:"occurenceDate", dateFormat: 'Y-m-d\\TH:i:s', type:"date"}, 
     {name:"docketNumber", type:"string"}, 
     {name:"courtLocationId", type:"int", useNull:true}, 
     {name:"assignedOfficerId", type:"int", useNull:true}, 
     {name:"primaryIncidentTypeId", type:"int", useNull:true}, 
     {name:"secondaryIncidentTypeId", type:"int", useNull:true}, 
     {name:"tertiaryIncidentTypeId", type:"int", useNull:true}, 
     {name:"incidentLocation", type:"string"}, 
     {name:"summary", type:"string"}, 
     {name:"personalItemsSeized", type:"string"}, 
     "supplements", 
     "parties", 
     "judgeIds" 
    ] 
+0

Ahora no estoy seguro de problemas de representación del cuadro combinado son debido a los valores de la ONU-representable que viene de el servidor. Configuré JSONObjectMapper para que no devuelva campos nulos al cliente (utilizando Jackson con Spring): setSerializationConfig(). SetSerializationInclusion (JsonSerialize.Inclusion.NON_NULL); ahora los campos nulos no regresan, pero el cuadro combinado aún no se procesa correctamente. Todavía investigando ... –

Respuesta

3

Trate de usar sin tipo de declaración. También puede utilizar el método de conversión:

{ 
    name: "primaryIncidentTypeId", 
    convert: function(value, row) { 
     return (value == null) ? null : parseInt(value); 
    } 
} 
+0

Gracias por la sugerencia. He añadido con éxito lo anterior (única diferencia: Ext.isEmpty (valor) - el valor es una cadena vacía y! = Nulo). Eso resolvió el problema de convertir JSON un valor nulo en cero, pero no resolvió el problema en el que se reducían mis cuadros combinados. Descubrí que tienes que establecer explícitamente el ancho: config para un combobox, de lo contrario los combos se reducirán. –

+0

Otra nota: me encontré con dos problemas durante este proceso.El primero es que la función convert: function I defined en los campos: param of the store nunca se llamó. La razón es porque estaba devolviendo metadatos de columna desde el servidor en el get que llenaba la tienda; sobrescribiendo lo que tenía codificado en la configuración javascript del lado del cliente. –

+0

El segundo problema fue con Extjs 3.3.0. la versión final tiene lo que creo que es un error al solicitar un BasicForm a updateRecord() en un formulario cuyos campos son nulos. El problema está en las entrañas de updateRecord() de BasicForm: itera a través de sus campos llamando a getValue(), pero luego llama a value.groups - o algo así. Si el valor es nulo, no es un objeto y ... KABOOM. ¿Alguna idea sobre éste? Me encantaría actualizar a 3.3 para que pueda usar la propiedad useNull: en lugar de convertidores. –

0

Sobre el ancho combinado: Yo suelo utilizar

defaults: { 
    anchor: '100%' 
} 

en la declaración de forma y no tienen problemas con anchos.

¿No es posible proporcionar funciones de conversión desde el lado del servidor junto con todos los demás metadatos?

Y todavía estoy usando ExtJS 3.2 - no hay necesidad de ningún nuevos errores en los sistemas de producción :)

+0

Sí, puede proporcionar las funciones de conversión en los metadatos del lado del servidor, perdón por no señalarlo. Usamos un código del lado del servidor para generar metadatos de tienda extjs basados ​​en cualquier bean Java. Nuestro proceso no es lo suficientemente sofisticado como para incluir convertidores en el código generado. –

+0

gracias por la punta re 'anchor: '100%'' Lo he usado, pero mi forma es demasiado ancha para que sea atractiva. Tendré que resolver algo como poner columnas en el formulario para administrar el tamaño. hasta que me des-pereza-i-fy, me quedaré con ancho:. :-) –

0

Esto también me ya ha recibido, además, se puede anular la función de conversión de tipo de Ext.data.Types para permitir valores nulos para campos de tipo entero.

Ext.data.Types.INT.convert = function(v){ 
    v = parseInt(String(v).replace(Ext.data.Types.stripRe, ''), 10); 
    return isNaN(v) ? null : v; 
}; 
-1

Debe utilizar defaultValue: null ,useNull : true porque el valor por defecto para el tipo integet es cero

Ejemplo:

{name:"primaryIncidentTypeId", type:"int", useNull:true , defaultValue: null }, 
Cuestiones relacionadas