2013-06-28 24 views
7

ScenarioAggiornamento di un campo in un record dyanamically in extjs

voglio aggiornare i dati della colonna di record specifico nella griglia avente negozio con dati statici. Ecco il mio negozio :

extend : 'Ext.data.Store', 
model : 'MyModel', 
autoLoad:true, 
proxy: { 
    type: 'ajax', 
    url: 'app/data/data.json', 
    reader: { 
     type: 'json', 
     root: 'users' 
    } 
}, 

mio data.json

{ 
    'users': [{ 
     QMgrStatus: "active", 
     QMgrName: 'R01QN00_LQYV', 
     ChannelStatus: 'active', 
     ChannelName: 'LQYV.L.CLNT', 
     MxConn: 50 
    }] 
} 

Quello che sto facendo per aggiornare il record:

var grid = Ext.getCmp('MyGrid'); 
var store = Ext.getStore('Mystore'); 
store.each(function(record, idx) { 
    val = record.get('ChannelName'); 
    if (val == "LQYV.L.CLNT") { 
     record.set('ChannelStatus', 'inactive'); 

     record.commit(); 
    } 
}); 
console.log(store); 
grid.getView().refresh(); 

mio problema

Sto ottenendo il record aggiornato qui. Non viene riflesso nel mio pannello della griglia. La griglia utilizza lo stesso vecchio archivio (statico). Il problema dei dati statici? O mi sto perdendo qualcosa o sto andando male? Per favore aiutami con questo problema. Grazie mille.

mia modifica

sto tryng codice di colore della colonna in base alla status.But qui sto sempre ottenendo il status = "attivo" anche se sto aggiornando il negozio.

Quello che sto cercando di fare nella mia griglia

{ 
    xtype: 'grid', 
    itemId: 'InterfaceQueueGrid', 
    id: 'MyGrid', 
    store: 'Mytore', 
    height: 216, 
    width: 600, 
    columns: [{ 
     text: 'QueueMgr Status', 
     dataIndex: 'QMgrStatus', 
     width: 80 
    }, { 
     text: 'Queue Manager \n Name', 
     dataIndex: 'QMgrName', 
     width: 138 
    }, { 
     text: 'Channel Status', 
     dataIndex: 'ChannelStatus', 
     width: 78, 
     align: 'center', 
     renderer: function(value, meta, record) { 
      var val = record.get('ChannelStatus'); 
      console.log(val); // Here I am always getting status="active". 
      if (val == 'inactive') { 
       return '<img src="redIcon.png"/>'; 
      } else if (val == 'active') { 
       return '<img src="greenIcon.png"/>'; 
      } 
     } 
    }, { 
     text: 'Channel Name', 
     align: 'center', 
     dataIndex: 'ChannelName', 
     width: 80 
    } { 
     text: 'Max Connections', 
     align: 'center', 
     dataIndex: 'MxConn', 
     width: 80 
    }] 
} 

risposta

9

Un modo drastico è riconfigurare la tua rete. Questo potrebbe non finire per essere la tua soluzione finale, ma forse si arriva a sapere cosa sta andando male.

chiamata

grid.reconfigure(store) 

invece di

grid.getView().refresh(); 

dopo aver modificato i record. È inoltre possibile utilizzare un singolo store.commitChanges() invece di utilizzare un record.commit() su ogni singolo record.

+1

Grazie Christoph. L'ho risolto usando grid.bindStore (MyUpdatedStore); Ma anche la tua soluzione scuote. Grazie mille – Dev

+0

Grid.reconfigure usato (negozio) - ha funzionato come un fascino! Grazie! –

1

Hai provato commettere tuo negozio e ricaricare esso?

Provare in questo modo.

yourstorename.commitChanges(); 
yourstorename.reload(); 
+0

Thnks Shankar.Per favore, controlla la mia modifica. Non riesco a visualizzare i valori del negozio nella mia griglia. – Dev

7

Forse è solo un errore di battitura, si assegna val nelle proprie condizioni. Prova questo (= a ==):

var grid = Ext.getCmp('MyGrid'); 
var store = Ext.getStore('Mystore'); 
store.each(function(record,idx){ 
     val = record.get('ChannelName'); 
     if(val == "LQYV.L.CLNT"){ 
     record.set('ChannelStatus','active'); 
     } 
     else { 
     record.set('ChannelStatus','inactive'); 
     } 
     record.commit(); 
}); 
console.log(store); 
grid.getView().refresh(); 
+0

Grazie. Ma sto ancora diventando lo stato come inattivo. Sto ancora ottenendo il val come inattivo nel renderer della colonna della mia colonna. Sta prendendo i vecchi valori del negozio. Grazie ancora. – Dev

0

ho risolto utilizzando

grid.bindStore(myupdatedstore); 

Come affermato da @Christoph

grid.reconfigure(store) 

funziona bene pure.