2010-11-01 10 views
7

persone,EXTJS Memorizza il problema con valori Null - useNull: non ha un effetto - Help?

Ho un componente combo supportato da un JSONStore. I dati caricati nel negozio restituiscono null per il valore della casella combinata. Il valore è un int. Il processo di decodifica JSON sta convertendo il valore nullo in uno zero; causando il mancato rendering del combobox quando tenta di trovare il pk, zero che non esiste nel suo backing store.

Ho trovato il useNull: opzione config per data.Field oggetti, aggiornato a 3.3.0 Finale e impostare il mio valore int per la combobox per useNull: true. Questo non ha alcun effetto, sfortunatamente. Il valore decodificato viene comunque modificato da null a zero.

Qualche idea su come non impostare il campo su uno zero quando i dati per un campo JSON sono nulli?

Ecco una foto di cosa sta succedendo. Nota i dati: il valore è zero, ma il valore JSON è nullo.

Grazie!

(! Gah reputazione stoopid < 10 quindi non posso postare direttamente il pic Guarda qui:. debug pic)

Inoltre, ecco il mio negozio config campo:

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

Ora io non sono sicuro problemi di rendering del ComboBox sono causa di valori non-mappabile provenienti da il server. Ho configurato JSONObjectMapper per non restituire campi null al client in questo modo (utilizzando Jackson w/Spring): setSerializationConfig(). SetSerializationInclusion (JsonSerialize.Inclusion.NON_NULL); ora i campi nulli non vengono restituiti, ma la casella combinata non riesce ancora a eseguire il rendering correttamente. Ancora alla ricerca .... –

risposta

3

Provare a utilizzare senza tipo di dichiarazione. Si può anche utilizzare il metodo convert:

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

Grazie per il suggerimento. Ho aggiunto correttamente quanto sopra (unica differenza: Ext.isEmpty (valore) - il valore è una stringa vuota e! = Null). Questo ha risolto il problema di JSON che traduceva un valore nullo in uno zero, ma non risolveva il problema in cui le mie caselle combinate si stavano riducendo. Ho scoperto che devi impostare in modo esplicito la larghezza: config per una casella combinata, altrimenti le combo si ridurranno. –

+0

Un'altra nota: ho avuto due problemi durante questo processo.Il primo è che convert: funzione che ho definito nei campi: param del negozio non sono mai stati chiamati. Il motivo è perché stavo restituendo i meta dati della colonna dal server nel get che popolava il negozio; sovrascrivendo ciò che avevo hard codificato nella configurazione javascript lato client. –

+0

Il secondo problema era con Extjs 3.3.0. la versione finale ha quello che penso sia un bug quando si chiede a BasicForm di aggiornareRecord() su un modulo i cui campi sono nulli. Il problema è nelle viscere di updateFecord() di BasicForm: itera attraverso i suoi campi chiamando getValue(), ma poi chiama value.groups - o qualcosa del genere. Se il valore è nullo, non è un oggetto e ... KABOOM. Qualche idea su questo? Mi piacerebbe l'aggiornamento alla versione 3.3 in modo da poter utilizzare useNull: proprietà anziché convertitori. –

0

circa la larghezza combinata: io di solito uso

defaults: { 
    anchor: '100%' 
} 

nella dichiarazione di forma e non hanno problemi con larghezze.

Non è possibile fornire funzioni di conversione dal lato server insieme a tutti gli altri metadati?

E sto ancora usando ExtJS 3.2 - non c'è bisogno di nuovi bug nei sistemi di produzione :)

+0

Sì, è possibile fornire le funzioni di conversione nei metadati dal lato server, mi dispiace di non averlo indicato. Usiamo un codice lato server per generare metadati dell'archivio di extjs basati su qualsiasi java bean. Il nostro processo non è ancora abbastanza sofisticato per includere i convertitori nel codice generato. –

+0

grazie per il suggerimento re anchor: '100%' 'L'ho usato, ma il mio modulo è troppo ampio per essere attraente. Dovrò capire qualcosa come inserire colonne nel modulo per gestire la dimensione. fino a quando non mi abbandono, mi atterro con la larghezza:. :-) –

0

Questo mi ha anche ricevuti, è possibile ignorare inoltre la funzione di conversione di tipo in Ext.data.Types per consentire valori nulli per campi di tipo intero.

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

È necessario utilizzare defaultValue: null ,useNull : true perché il valore di default per il tipo integet è pari a zero

Esempio:

{name:"primaryIncidentTypeId", type:"int", useNull:true , defaultValue: null }, 
Problemi correlati