3

Ext JS 4.0.7 で PagingMemoryProxy を持つストアを持つグリッドを作成しようとしています。ストア内の情報を編集できるようにしたいのですが、情報を編集して次のページに移動すると、前のページで編集した情報が失われてしまいます。私のコードは次のとおりです。

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 を掘り下げ始め、最終的にme.getNewRecordsコードの ext-all-debug で 44,600 行を見ました。toCreateこれにより、最終的にコミットされていないレコードのみが返されるようになりました (明らかにレコードのファントム プロパティをチェックするため)。したがって、編集したレコードは44,600 行目の変数に含まれません。

e.record.commit を取り出したとき、toCreate 変数には編集されたレコードが含まれるようになりましたが、これで問題が解決することはありませんでした。

私の質問は、ストアを PagingMemoryProxy と同期するにはどうすればよいですか? 出来ますか?もしそうなら、私は何をしますか?

どんな助けでも大歓迎です!

4

1 に答える 1

1

最終的にPagingMemoryProxyに追加するJSONデータをループすることで問題を解決しました...基本的にJSONの各レコードに「インデックス」値を追加したので、ストア内のレコードを編集したいときは、簡単にインデックスを付けることができますこのインデックス値を使用してその PagingMemoryProxy を作成します。簡単な修正。

于 2012-07-20T00:45:24.453 に答える