2014-02-05 35 views
1

我的問題是我想更新現有商店並顯示網格上的更改。 我正在做的更新是:提交extjs存儲中現有記錄的更改

var record = store.getById(me.internalParameters.editInfo.id); 
//console.log(me.InfoEditorPanel.hardwareIdField.value); 
record.set('hardwareid', me.InfoEditorPanel.hardwareIdField.value); 
record.set('location', me.InfoEditorPanel.locationField.value); 
record.set('isActive', me.InfoEditorPanel.isActiveField.value); 
record.commit(); 
store.load(); 

這裏我用什麼來建立網格。

Utils.getPanelListGrid = function (parameters) { 
    if (parameters.initParameters == null) 
     parameters.initParameters = {}; 
    var initParameters = parameters.initParameters; 
    initParameters.gridColumns = [ 
     { header: "ID", dataIndex: "id", flex: 1 }, 
     { header: "Hardware ID", dataIndex: "hardwareid", flex: 1 }, 
     { header: "Location", dataIndex: "location", flex: 1 }, 
     { header: "Active", dataIndex: "isActive", flex: 1 } 
    ]; 
    return new Backend.shared.MyDataGrid(parameters); 
}; 

Ext.define(
    "shared.MyDataGrid", { 

     extend: "Ext.grid.Panel", 
     xtype: "MyDataGrid", 
     title: "MyDataGrid - Hardcoded values", 
     initParameters: { 
      storeIdProperty: null, 
     }, 
     initComponent: function() { 
      this.store = Ext.create('Ext.data.Store', { 
       storeId: 'myStore', 
       proxy: { 
        type: 'memory', 
        reader: { 
         type: 'json', 
         root: 'items' 
        } 
       }, 
       fields: ['id', 'hardwareid', 'location', 'isActive'], 
       data: { 
        'items': [{ 
         'id': '123456', 
         'hardwareid': "HID-159", 
         'location': "Bedroom", 
         'isActive': "No" 
        }, { 
         'id': '789456', 
         'hardwareid': "HID-357", 
         'location': "Kitchen", 
         'isActive': "Yes" 
        }, { 
         'id': '147852', 
         'hardwareid': "HID-149", 
         'location': "Guest-room", 
         'isActive': "Yes" 
        } 
        ] 
       } 
      }); 

      this.columns = this.initParameters.gridColumns; 

      this.listeners = { 
       selectionchange: { 
        scope: this, 
        fn: function (selectionModel, selectedRecords, eventOptions) { 
         this.selectedIds = []; 
         this.selectedItems = []; 

         if (selectedRecords != null) { 
          for (var i = 0; i < selectedRecords.length; i++) { 
           var item = selectedRecords[i].data; 
           this.selectedIds.push(item[this.initParameters.storeIdProperty]); 
           this.selectedItems.push(item) 
          } 
         } 
         if (this.initParameters.selectionChangeCallback != null) 
          this.initParameters.selectionChangeCallback(this.selectedIds, this.selectedItems); 
        } 
       } 
      }; 

      shared.MyDataGrid.superclass.initComponent.call(this); 
     }, 
     getRecordCount: function() { 
      return this.getStore().getTotalCount(); 
     }, 
     getSelectedIds: function() { 
      return this.selectedIds; 
     }, 
     getSelectedItems: function() { 
      return this.selectedItems; 
     } 
    }); 

任何人都可以請解釋我應該怎麼做才能使網格顯示更新的行?

回答

1

我建議在'selectionchange'事件中使用下面的代碼。

this.getStore().load({ 
    params:{ 
     'yourModelIdProperty':'selectedId' 
    } 
}); 

這是調用商店代理。您應該爲該代理編寫一個函數並加載更新後的數據。