View Full Version : Problem with store.add()

30 Dec 2010, 4:55 AM
Hello again guys,
I'm trying to add a record to a store.
First, I have a textfield in a form that read bar codes. Once captured the bar code, does a DB query that returns the product data in json format. This new product is added to the store previously loaded and rendered in a gridPanel (plugin Ext.ux.TouchGridPanel)

I do a store.add(newRecord) and then a store.sync(), but does not update the data in the grid.

On the other hand, if lower surface of store.add (newRecord); do a store.insert(0, newRecord), adds the record to store and display them on the grid, but lost the last record.
I do not know exactly what makes the store.sync(). According to the definition of the API: "Synchronize with the STI Proxy Store. This ASKs the Proxy to batch together Any new, updated and deleted records in ..." but in my case does not synchronize well because it adds the new record but it's as if I were taking the number of records in the initial charge of store.

In addition, once read the bar code field, so clean that you can re-reading a new barcode with Ext.getCmp("cbarras ").setValue() and have to reposition the active focus on the field. Try again with Ext.getCmp("cbarras").focus(), but does not.

Any suggestions for this problem please?
[Sorry for my basic English]

My code:

TouchGridPanelModel = Ext.regModel("TouchGridPanelModel", {
fields: [
{name: 'referencia', type: 'string'},
{name: 'barcode', type: 'string'}
storeTouchGridPanel = new Ext.data.Store({
autoLoad: true,
model : "TouchGridPanelModel",
proxy: {
type: 'ajax',
url : 'includes/data/prueba.json'

This query consume a json exit:

"referencia": "Corte Caballero",
"barcode": "4021609277606"
"referencia": "Corte Señora",
"barcode": "769295098900"

Render gridPanel:

GridPanel = new Ext.ux.TouchGridPanel({
fullscreen : true,
store : storeTouchGridPanel,
selModel : {
singleSelect : true
colModel: [
header : "Referencia",
mapping : "referencia"
header : "Barcode",
mapping : "barcode"

var barcodeForm = new Ext.form.FormPanel( {
items : [{
xtype: 'textfield',
id: 'cbarras',
name: 'cbarras',
listeners: {
afterrender: function(){
keyup: function(textbox, event) {
url : 'buscaProducto.json',
method: 'post',
params: {barCode: barcodeForm.getValues().cbarras},
success: function(response, opts) {
//data = Ext.decode(response.responseText);
data = [{referencia:"Composer Wild",barcode:"8413384523119" }]
storeTouchGridPanel.add(0,{idPT:5,tipoVenta:'producto',referencia:"Composer Wild",marca:"GW",linea:"Trendline",pvp:25.02,uds:1,barcode:"4021609277606" });

//clear field

//focus again

}//EO if(event.browserEvent.keyCode==13){}

}//EO keyup: function(textbox, event) {}
} // EO listeners:

tienda.Venta = new Ext.Panel({
fullscreen : true,
dockedItems : [barcodeForm,GridPanel],

Hola de nuevo chicos,
Estoy intentando añadir un registro a un store.
Primeramente, tengo un textfield en un formulario que lee codigos de barras. Una vez capturado el codigo de barras, hace una consulta a BBDD que devuelve los datos del producto en formato json. Este nuevo producto debe añadirse al store previamente cargado y renderizado en un gridPanel (plugin Ext.ux.TouchGridPanel)
Hago un store.add(newRecord); y despues un store.sync(); pero no se actualiza el dato en el grid.
Por otro lado si envez de store.add(newRecord); hago un store.insert(0,newRecord); añade el registro al store y lo muestra en el grid, pero pierde el ultimo registro.
No sé exactamente que es lo que hace el store.sync(). Segun la definición de la API: "Synchronizes the Store with its Proxy. This asks the Proxy to batch together any new, updated and deleted records in ..." pero en mi caso no sincroniza bien porque añade el nuevo record pero es como si siguiera teniendo el numero de registros de la carga inicial del store.

Además, una vez leido el campo de codigo de barras, lo limpio para que se pueda volver a leer un nuevo codigo de barras con Ext.getCmp("cbarras").setValue(); y tiene que volver a situar el foco activo en el campo. Intento de nuevo con Ext.getCmp("cbarras").focus(); pero no lo hace.

Alguna sugerencia para este problema por favor?