2010-12-08 21 views
3

ExtJSのグリッドでは、私はこのような選択したデータ項目のインデックスを取得することができますExtJSグリッドでダブルクリックされた行からデータを取得する方法は?

grid.getSelectionModel().on('rowselect', function(sm, index, rec){ 
    changeMenuItemInfoArea(menuItemApplication, 'you are on row with index ' + index); 
    var row_number_parts = rec.id.split('-'); // rec.id = e.g. "ext-record-1" 
    var selected_index = row_number_parts[2] - 1; 
    alert(selected_index); 
}); 

をしかし、どのように、私はダブルクリックで選択したデータ項目のインデックスを取得できますか?

私はこれを実行します。

listeners: { 
    'rowdblclick': function(grid, rowindex, e){ 
     console.log(...); 
    } 
} 

grideの、インデックス、ユーザーが列を頼っ場合ので、私は必要な情報とrowindexは有用ではありませんていないようです両方をダブルクリックされた行は必ずしもグリッドをロードしたデータセットのインデックスではありません。

補遺

おかげ@McStretch、私は最終的に、このように、その後、編集ページにIDを送信して、id列を隠して、アイテムリストにidを入れて手で問題を解決しました:

listeners: { 
    'rowdblclick': function(grid, index, rec){ 
     var id = grid.getSelectionModel().getSelected().json[0]; 
     go_to_page('edit_item', 'id=' + id); 
    } 
} 

答えて

9

指数は、実際にのためのマニュアルに従って、店舗内のレコードのインデックスを参照:

function(grid, rowIndex, columnIndex, e) { 
    // Get the Record, this is the point at which rowIndex references a 
    // record's index in the grid's store. 
    var record = grid.getStore().getAt(rowIndex); 

    // Get field name 
    var fieldName = grid.getColumnModel().getDataIndex(columnIndex); 
    var data = record.get(fieldName); 
} 

この場合、グリッドの並べ替えを心配する必要はありません。あなたの'rowdblclick'リスナーで上記の方法を使ってインデックス/レコードを取得する必要があると思います。それを試して、何が起こるかを見てください。

-1

私はこれを行う方法を見つけました:

listeners: { 
    'rowdblclick': function(grid, index, rec){ 
     var row_label = grid.getSelectionModel().getSelected().id; 
     var row_label_parts = row_label.split('-'); 
     var selected_index = row_label_parts[2] - 1; 
     alert(selected_index); 
    } 
} 
+4

これを行わないでください。ソート後もインデックスは正しいです。並べ替えはストアレベルで処理されるため、インデックスはストアとグリッドの間で一致します。 –

+0

ありがとう、インデックスが何を参照したかは不明でした –