2013-12-19 97 views
0

我與本地商店有一個小網格,每當我更新該商店中的數據時,該商店中的記錄更新,但更新的記錄是添加在網格中而不是替換舊的。Extjs網格和本地商店在網格中創建重複項,同時更新商店

網:

Highlights: Ext.create('Ext.grid.GridPanel',{ 
      store:Ext.create('Ext.data.Store', { 
       fields: [ 
         {name: 'id',  type: 'string'}, 
         {name: 'QUANTITY', type: 'int'}, 
         {name: 'HIGHLIGHT', type: 'string'}, 
         {name: 'ICON', type:'string'}, 
         {name: 'PRIORITY', type:'int'}, 
         {name: 'GROUPICON', type:'string'}, 
       ], 
       sorters:['PRIORITY','QUANTITY'], 
       data : [] 
      }), 
      hideHeaders:true, 
      columns:[{ 
       header:'Icon', 
       dataIndex:'ICON', 
       width:22, 
       stateId:'ICON', 
       renderer:function(val){ 
        if(val != ''){ 
         return '<img src=icons/cq/'+val+'.png align=absmiddle border=0>'; 
        }else{ 
         return ''; 
        } 
       } 
      },{ 
       header: 'Quantity', 
       dataIndex: 'QUANTITY', 
       stateId:'QUANTITY', 
       width:35, 
       align:'right', 
       sortable: true, 
       hidden: false 
      },{ 
       header: 'Highlight', 
       dataIndex: 'HIGHLIGHT', 
       stateId:'HIGHLIGHT', 
       renderer:function(val){ 
        return '<b>'+val+'</b>'; 
       }, 
       flex:1, 
       sortable: true, 
       hidden: false 
      },{ 
       header:'Group Icon', 
       dataIndex:'GROUPICON', 
       width:28, 
       stateId:'GROUPICON', 
       renderer:function(val){ 
        if(val != ''){ 
         return '<img src=icons/cq/'+val+'.png align=absmiddle border=0>'; 
        }else{ 
         return ''; 
        } 
       } 
      }], 
      title:'I have...', 
      iconCls:'topic', 
      padding:'0 0 8 0' 
     }) 

添加/更新記錄:

Highlight:function(store,id,highlight,icon,priority,groupicon){ 
    //SET VALUES 
    if(typeof icon == 'undefined'){ var icon = '';} 
    if(typeof priority == 'undefined'){ var priority = 9;} 
    var quantity = store.data.length; 
    //ADD/UPDATE 
    if(quantity>0){ 
     this.Grids.Highlights.getStore().add({PRIORITY:priority,ICON:icon,GROUPICON:groupicon,QUANTITY:quantity,HIGHLIGHT:highlight,id:id}); 
    }   

} 

正如你可以看到有一個 「id」 字段和ID正確地使用ExtJS的更新商店。

如果我觸發3次相同的'add()'到商店,我在網格中得到3個相同的行,同時商店中仍然只有一條記錄。

爲什麼?

謝謝!

回答

1

使用方法add應該只在每個記錄被使用一次,當它第一次被添加到商店時。

如果您要更新現有記錄,您需要在商店中找到該記錄(例如getById),然後在其上設置新值。

所以,如果你想更新或添加(如果不存在的話),你可以這樣做:

var store = this.Grids.Highlights.getStore(), 
    record = store.getById(id), 
    properties = { 
     PRIORITY: priority, 
     ICON: icon, 
     GROUPICON: groupicon, 
     QUANTITY: quantity, 
     HIGHLIGHT: highlight 
    }; 

// if the record already exists in the store, update it 
if (record) { 
    record.set(properties); 
    record.commit(); 
} 
// else add a new record 
else { 
    store.add(Ext.apply(properties, {id: id})); 
} 
+0

我很驚訝。我認爲這是一個錯誤。當我在商店中使用add()時,它實際上更新了商店中的記錄(在那裏沒有重複,所以它檢測到id密鑰並用更新的數據覆蓋正確的記錄),所以爲什麼會有重複在網格?我添加了「this.Grids.Highlights.getView()。bindStore(this.Grids.Highlights.getStore());」添加()後,一切都很好,但我知道這是一個醜陋的補丁... – ImShogun