Abbiamo implementato un'associazione per alcuni tipici usi di Grid nell'applicazione. Funziona perfettamente, tranne se si modifica un negozio, ad esempio aggiungi un record, vedrai n + DUE record identici in vista. Quando ho esaminato lo stato del negozio, ha mostrato n + 1 valori.FieldBinding per Grid. La visualizzazione rimane incoerente dopo l'aggiunta di un nuovo record a Store
Esso va come se ho una griglia con un record mostrata in essa e chiamo: grid.getStore().add(modelFactory.createModel(event.getBean()));
ora ho:
La seconda e la terza linea sono uguali e terzo non può essere selezionato. Inoltre, non è presente in grid.getStore()
.
Fonti:
freqsGrid = new AwesomeGridPanel() {
@Override
public void createColumns() {/**/}
};
freqBinding = AwesomeGridBinding.createGridBinding(freqsGrid, "frequencies");
semplice fonte vincolante. Associa la proprietà Elenco del modello alla griglia così com'è.
public class AwesomeGridBinding {
public static FieldBinding createGridBinding(AwesomeGridPanel grid, String property) {
return new FieldBinding(new AwesomeGridAdapterField(grid), property);
}
}
class AwesomeGridAdapterField<T> extends AdapterField {
protected AwesomeGridPanel grid;
private StoreListener<BeanModel> storeChangedListener;
public AwesomeGridAdapterField(AwesomeGridPanel grid) {
super(grid);
this.grid = grid;
configureGrid(grid, this);
}
@Override
public void setValue(Object value) {
List data;
if (value == null)
data = new ArrayList<>();
else if (!(value instanceof List))
throw new IllegalArgumentException();
else
data = (List) value;
grid.getStore().setMonitorChanges(false);
grid.getStore().setFiresEvents(false);
setResults(grid.getStore(), data);
grid.getStore().setFiresEvents(true);
grid.getStore().setMonitorChanges(true);
Se rimuovo la linea basso, vista fermate per mostrare n + 2 righe dopo aggiungono, e comincia a mostrare riga aggiunta anche dopo formBinding.bind(createModel(bean));
ad un altro bean.
Non ho esperienza con gwt/gxt, quindi solo per curiosità: nel tuo metodo 'setValue' disabiliti il monitoraggio delle modifiche e l'attivazione degli eventi prima di chiamare' setResult', qual è il motivo? –
@ Sva.Mu Un'altra opzione è quella di ricadere nella ricorsione e l'overflow dello stack causa modifiche setValue Memorizza, genera eventi, gli eventi causano setValue. –
Mi sembra che tu stia continuando a pulirti i dati ogni volta che aggiungi qualcosa. –