2013-05-14 80 views
4

帶編輯器網格的緩衝存儲區。EXTJS 4.2.0.663:帶編輯器網格的緩衝存儲區

我們一直在使用4.1.1版本並且正在遷移到4.2.0.663。我們擁有包含大量數據的緩衝存儲的編輯網格。編輯器網格類似於行編輯示例(除了它使用緩衝存儲)。但對於電網的附加功能已經遷移後停止,它會引發錯誤

Ext.Error: insert operation not supported into buffered Store.

var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', { 
     clicksToMoveEditor: 1, 
     autoCancel: false 
    }); 
// create the grid and specify what field you want 
// to use for the editor at each column. 
var grid = Ext.create('Ext.grid.Panel', { 
    store: store, 
    columns: [{ 
     header: 'Name', 
     dataIndex: 'name', 
     flex: 1, 
     editor: { 
      // defaults to textfield if no xtype is supplied 
      allowBlank: false 
     } 
    }, { 
     header: 'Email', 
     dataIndex: 'email', 
     width: 160, 
     editor: { 
      allowBlank: false, 
      vtype: 'email' 
     } 
    }, { 
     xtype: 'datecolumn', 
     header: 'Start Date', 
     dataIndex: 'start', 
     width: 90, 
     editor: { 
      xtype: 'datefield', 
      allowBlank: false, 
      format: 'm/d/Y', 
      minValue: '01/01/2006', 
      minText: 'Cannot have a start date before the company existed!', 
      maxValue: Ext.Date.format(new Date(), 'm/d/Y') 
     } 
    }, { 
     xtype: 'numbercolumn', 
     header: 'Salary', 
     dataIndex: 'salary', 
     format: '$0,0', 
     width: 90, 
     editor: { 
      xtype: 'numberfield', 
      allowBlank: false, 
      minValue: 1, 
      maxValue: 150000 
     } 
    }, { 
     xtype: 'checkcolumn', 
     header: 'Active?', 
     dataIndex: 'active', 
     width: 60, 
     editor: { 
      xtype: 'checkbox', 
      cls: 'x-grid-checkheader-editor' 
     } 
    }], 
    renderTo: 'editor-grid', 
    width: 600, 
    height: 400, 
    title: 'Employee Salaries', 
    frame: true, 
    tbar: [{ 
     text: 'Add Employee', 
     iconCls: 'employee-add', 
     handler : function() { 
      rowEditing.cancelEdit(); 

      // Create a model instance 
      var r = Ext.create('Employee', { 
       name: 'New Guy', 
       email: '[email protected]', 
       start: Ext.Date.clearTime(new Date()), 
       salary: 50000, 
       active: true 
      }); 

      store.insert(0, r); 
      rowEditing.startEdit(0, 0); 
     } 
    }], 
    plugins: [rowEditing], 
}); 

請對什麼是應遵循的方法提出建議。

+0

您是否提交過錯誤或升級? – dbrin 2013-07-29 17:55:04

+0

不,我沒有提交錯誤,也無法升級,因爲我們在大規模使用緩衝存儲,並需要能夠使用它與編輯器網格。 – 2013-07-30 04:57:26

回答

2

與行編輯插件有類似的問題。看起來這個問題與緩衝存儲內部結構有關。要解決此問題,您可以:

  1. 擴展行編輯插件並更改插入數據的方式。在插入數據的重載當前頁之後說...
  2. 從使用緩衝存儲器切換到爲網格使用bufferedrenderer插件。這個插件的快速瀏覽你可以在這裏找到:bufferedrenderer
  3. 做一些更深入的研究,可能有一個解決方案,即使沒有消除緩衝的商店。

我我的情況下,我會選擇第二種方式,除非我在ExtJS的4.2緩衝存儲的變化澄清一切......

UPDATE:看來,緩衝專賣店在4.2有限functionalty。他們仍然是越野車。現在有這個問題:commit bug

+0

Ext Js提供了很多錯誤修正,他們特別[修復了很多緩存的商店錯誤](http://cdn.sencha.com/ext/beta/4.2.1.744/release-notes.html) – Christoph 2013-06-17 11:37:02

2

我也有這個問題後遷移到Ext Js 4.2。我通過創建緩衝存儲的臨時副本而無需緩衝來解決此問題。應用於您的代碼,如下所示:

tbar: [{ 
    handler : function() { 
     rowEditing.cancelEdit(); 

     // Create a model instance 
     var r = Ext.create('Employee', { 
      name: 'New Guy', 
      email: '[email protected]', 
      start: Ext.Date.clearTime(new Date()), 
      salary: 50000, 
      active: true 
     }); 

     var storeClassName = Ext.getClassName(store); 
     var tempStore = Ext.create(storeClassName, { buffered: false }); 
     tempStore.add(r); 
     tempStore.sync({ 
      success: function(args) { 
       // reload your grid and scroll to the position of the new record 
       // e.g. 
       store.data.clear(); 
       store.load({ 
         success: function() { 
          grid.view.bufferedRenderer.scrollTo(args.response.indexOfNewRecord, true); 
          rowEditing.startEdit(0, 0); 
         } 
       });      
      } 
     }); 
    } 
}], 

缺少的是索引的定義。我從我的web服務中獲取同步響應,因此我可以滾動到總共數據集中的索引位置。

+0

如何將此商店與編輯網格? – 2013-06-17 11:26:57

+0

在Ext.grid.plugin.EditingView中有一個beforeeedit事件。也許你可以在這個事件中添加一個處理程序並在之前交換商店? – Christoph 2013-06-17 11:40:07

+0

爲了清晰起見,你可以添加一些更多的代碼嗎?如前所述,我無法在插入之前更換商店。 – 2013-07-17 11:59:52

2

需要注意的一件事是,儘管創建無緩衝存儲的解決方法在您可以通過代碼執行時效果很好,但您仍有一些網格編輯元素無法獲得此機會 - 例如,使用單元格或者在具有緩衝存儲的網格上的行編輯插件不再適用於4.2。

最後,我們最終回到4.1重新獲得緩衝存儲功能,並將在再次升級之前監視未來ExtJS更新中會發生的情況。我建議任何人在大型遠程數據庫上使用緩衝存儲(在頁面加載過程中不能接受讀取整個數據庫),請仔細考慮4.2升級。

+0

他們在新版本中破壞現有功能確實很糟糕。這意味着如果我們想升級,我們需要重寫很多代碼。我也同意任何使用緩衝存儲的人都應該遠離4.2版本。 – 2013-07-30 05:16:13