2012-10-04 45 views
4

我有一個簡單的情況,我得到了一個附加商店的網格。網格在存儲記錄編輯和提交後丟失(可見)選擇

有2個按鈕。一個具有修改所選記錄的處理程序。一個提供所選記錄的處理程序。

當我選擇一條記錄並按下編輯 - >編輯發生選擇(看起來丟失),如果您撥打grid.geSelectionModel().getSelection()您會看到該記錄仍處於選中狀態。它只是不顯示這種方式。

您不能再次選擇它,您首先必須選擇另一條記錄,然後選擇記錄。

其次,當您選擇一條記錄點擊提交按鈕時,該值被提交,但選擇再次顯示爲丟失。

這是一個錯誤?我怎樣才能解決這個問題?我希望它保持選擇可見!

Here is a fiddle

這裏是示例代碼:(我用分機4.1.1)

var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', { 
     clicksToEdit: 1 
    }); 

Ext.create('Ext.data.Store', { 
    storeId: 'simpsonsStore', 
    fields: ['name', 'email', 'phone'], 
    data: { 
     'items': [{ 
      'name': 'Lisa', 
      "email": "[email protected]", 
      "phone": "555-111-1224" 
     }, { 
      'name': 'Bart', 
      "email": "[email protected]", 
      "phone": "555-222-1234" 
     }, { 
      'name': 'Homer', 
      "email": "[email protected]", 
      "phone": "555-222-1244" 
     }, { 
      'name': 'Marge', 
      "email": "[email protected]", 
      "phone": "555-222-1254" 
     }] 
    }, 
    proxy: { 
     type: 'memory', 
     reader: { 
      type: 'json', 
      root: 'items' 
     } 
    } 
}); 

Ext.create('Ext.container.Container', { 
    layout: 'fit', 
    renderTo: Ext.getBody(), 
    items: [{ 
     xtype: 'grid', 
     store: Ext.data.StoreManager.lookup('simpsonsStore'), 
     columns: [{ 
      text: 'Name', 
      dataIndex: 'name' 
     }, { 
      text: 'Email', 
      dataIndex: 'email', 
      flex: 1 
     }, { 
      text: 'Phone', 
      dataIndex: 'phone' 
     }], 
     height: 200, 
     buttons: [{ 
      text: 'commit selection', 
      handler: function(){ 
       this.up('grid').getSelectionModel().getSelection()[0].commit(); 
      } 
     },{ 
      text: 'set selection name to maggy', 
      handler: function(){ 
       this.up('grid').getSelectionModel().getSelection()[0].set('name', 'Maggy'); 
      } 
     }] 
    }] 
});​ 

UPDATE:

我報告說,它在sencha forum。 Mitchel Simoens告訴我,它已在Ext 4.1.2中修復。太糟糕了,這是一個「支持用戶只有」版本..

UPDATE:

我定位的問題,試圖修復它。我相信這個問題位於Ext.view.Table類的onUpdate方法,圍繞這段代碼更精確:

​​

它是一個壞主意,只留下這段代碼呢?我評論說,它現在似乎正在工作,但它不會破壞一些其他功能? http://jsfiddle.net/Vandeplas/YZqch/10/

回答

6

我認爲它是一個錯誤,也許是刷新網格以顯示髒位的一部分。
我醜陋的方式規避這一點,in your revised fiddle

{ 
    text: 'set selection name to maggy', 
    handler: function(){ 
     var sel = this.up('grid').getSelectionModel(); 
     var rec = sel.getSelection()[0]; 
     rec.set('name', 'Maggy'); 
     sel.deselectAll(); 
     sel.select(rec.index); 
    } 
} 

我這樣做是爲了.set(),但同樣可以爲commit()

希望這有助於一定程度上完成。

+0

這是最明顯的解決方案。但是這引發了選擇事件。我發佈了一個非常簡單的例子。但在我的真實應用程序中,我傾聽選擇事件來加載其他面板。在小組中,我進行了修改,選擇了潛水選項並保存,再次選擇了潛水選擇。 – VDP

+0

我[改進](http://jsfiddle.net/Vandeplas/YZqch/7/)它通過暫停事件有點。這種溶劑會在分頁商店中使用嗎? 「rec.index」會一直正確嗎? – VDP

+0

我會最後告訴你關於分頁的問題,因爲我甚至無法獲得無限的滾動條爲我們工作。我相信'rec.index'將是正確的,只要您在處理程序中的相同功能期間不刷新網格即可。但是如果你這樣做,你甚至想要選擇同一條線嗎?底線,我恨我們的方法,因爲他們是醜陋的黑客,到一個不起作用的簡單功能。 BL2:你的代碼非常好。 – bldoron