2012-07-12 63 views
3

我試圖創建一個具有Ext JS 4.0.7中的PagingMemoryProxy存儲的網格。我希望能夠在商店中編輯信息,但是我發現如果編輯信息並轉到下一頁,我會丟失上一頁中的編輯信息。我的代碼如下。Ext JS 4:與其分頁內存代理同步存儲

Ext.Loader.setConfig({ 
    enabled: true 
}); 

Ext.Loader.setPath('Ext.ux', 'examples/ux'); 

Ext.require('Ext.ux.data.PagingMemoryProxy'); 

Ext.onReady(function() { 
    var data = [ 
    {name: 'jack johnson', text: 'record1'}, 
    {name: 'jack johnson', text: 'record2'}, 
    {name: 'jack johnson', text: 'record3'}, 
    {name: 'jack johnson', text: 'record4'} 
    ]; 

    var store = Ext.create('Ext.data.Store', { 
    fields: ['name', 'text'], 
    data: data, 
    proxy: { 
     type: 'pagingmemory' 
    }, 
    pageSize: 2 
    }); 

    var grid = Ext.create('Ext.grid.Panel', { 
    store: store, 
    region: 'center', 
    id: 'thegrid', 
    plugins: [{ 
     ptype: 'cellediting', 
     clicksToEdit: 1, 
     listeners: { 
     edit: function(editor, e) { 
      //e.record.commit(); 
     } 
     } 
    }], 
    columns: [{ 
     text: 'Name', 
     dataIndex: 'name', 
     editor: { 
     allowBlank: false 
     } 
    }, { 
     text: 'Text', 
     dataIndex: 'text' 
    }], 
    dockedItems: [{ 
     xtype: 'pagingtoolbar', 
     store: store, 
     dock: 'bottom', 
     displayInfo: true 
    }], 
    }); 

    Ext.create('Ext.Viewport', { 
    layout: 'border', 
    items: [grid] 
    }); 
}); 

我想知道我怎麼能同步跟進我的商店與代理的數據數據,因爲商店的數據實際上包含了記錄,而代理的數據包含記錄的數據,所以這是不可能找到ID的記錄中代理人。我決定試一試同步方法。

使用同步方法後,似乎沒有任何事情發生,所以我想也許我應該提交記錄...因此註釋掉了e.record.commit代碼。當它沒有做任何事情時,我開始在Firebug中進行挖掘並最終在44600行上查看了ext-all-debug me.getNewRecords代碼。這最終導致我只返回未提交的記錄(因爲它顯然檢查記錄的幻像屬性),因此,我編輯的任何記錄都不會包含在行44,600的toCreate變量中。

當我拿出e.record.commit時,toCreate變量現在包含已編輯的記錄,但這些都沒有幫助解決我的問題......只是初步探索和發現了我。

所以我的問題是,如何與PagingMemoryProxy同步商店?可能嗎?如果是這樣,我該怎麼辦?

任何幫助,將不勝感激!

+0

我確實發現[此線程](http://gwt-ext.com/forum/viewtopic.php?f=7&t=3511)提到使用兩個商店,但我覺得這有點浪費... – incutonez 2012-07-19 16:15:55

回答

1

通過循環遍歷最終添加到PagingMemoryProxy的JSON數據解決了問題...基本上爲JSON中的每條記錄添加了一個「索引」值,所以當我想要在商店中編輯記錄時,我可以通過使用此索引值輕鬆地將其索引到PagingMemoryProxy中。簡單的修復。