2017-02-08 11 views
1

ExtJS 4.2 私はリモートロードのレコードを持つグリッドを持っています。グリッド内の行を選択し、データベース内の行を更新します。データベース内のレコードを更新し、store.load()を使用してストアを再ロードします。これが発生した後、私はデバッガで一時停止し、ストアをチェックすることができ、実際に正しい値を持っています。同じレコードが選択されているが、次のコード:store.loadの後にExtjsグリッドを選択すると、間違ったデータが返される

var selectedRecords = grid.getSelectionModel().getSelection(); 

は、更新されたレコードを取得されていません。選択を解除して再選択すると、レコードはリフレッシュされますが、レコードは更新されず、古い値が残っています。それをリフレッシュする方法はありますか?

ロード時に選択された行を取得することに関する多くの記事を参照してください。しかし、それは私自身にとってはそれほど問題ではありません。

+0

私はext js 4.2にこのバグがあると信じています。 –

答えて

1

基本的な選択モデルのバグのようです。 Ext.selection.ModelはExt.util.Observableを拡張するため、 'selected'混合コレクションは更新されず、グリッド選択に関連するイベントが発生した場合にのみ更新されます。あなたが選択を解除してから、手動で選択し、あるいは店舗の負荷にコールバックを登録したくない場合は、

var selectedRecords = grid.selModel.getSelection(); 

が万一、

var selectionArr = grid.selModel.selected; selectionArr.replace(selectionArr.keys[0],grid.getStore().getById(selectionArr.keys[0]));

今すぐ試す、回避策として、次の試してくださいうまく動作します。

+0

@tgreen:それがあなたのために働いているなら、答えとしてマークしてください。 – inQstvJS

+0

ありがとう!これは素晴らしい回避策です。 ; selectionArr.keys.forEach(関数(キー){ selectionArr 'activeGridpanel.store.addListener( '負荷'、関数(店舗){ VAR selectionArr = activeGridpanel.selModel.selected: – tgreen

+0

は、ここで私が使用されるコードです。 (key、store.getById(key)); }) }) ' – tgreen

0

値を更新した後、グリッドストアをリフレッシュしてみてください。

Ext.getCmp('myGridID').getView().refresh() 
+0

ビューを更新しても問題は解決されません。 –

+0

はい私はこれを試して、それは動作しませんでした。私はSuryaが正しいかもしれないと思う。 – tgreen

関連する問題