ExtJS:如何在右键事件中获取Grid选中行的记录数据?
获取ExtJS Grid上下文菜单选中记录的方法
嘿,我来帮你搞定这个问题!你已经成功在Grid的右键菜单里加了"Update Password"选项,现在就差拿到选中行的记录数据(尤其是id)来进行后续的密码更新操作对吧?下面给你两种实用的实现方式:
方式一:在触发确认框时传递选中记录
这种方式逻辑更清晰,我们先在onUpdatePassword里拿到选中的记录,再把它作为额外参数传给确认框的回调函数:
修改onUpdatePassword方法
onUpdatePassword: function (button) { var me = this; // 获取单选模式下的选中记录(多选场景用getSelection()) var selectedRecord = me.getView().getSelectionModel().getFirstSelected(); // 先判断有没有选中记录,避免后续报错 if (!selectedRecord) { Ext.MessageBox.alert('提示', '请先选择一条要修改密码的记录'); return; } // 把选中记录作为额外参数传给confirm的回调 Ext.MessageBox.confirm(translations.confirm, translations.confirmChangePassword, me.changePassword, me, [selectedRecord]); },
修改changePassword方法接收参数
现在你就能在回调里直接拿到选中的记录,轻松获取id了:
changePassword: function (button, selectedRecord) { var me = this; if (button === "yes") { // 获取选中记录的id var targetRecordId = selectedRecord.get('id'); console.log('要修改密码的记录ID:', targetRecordId); return new Ext.window.Window({ autoShow: true, title: 'Create Password', modal: true, width: 250, height: 160, items: [ { xtype: 'container', height: 10 }, { xtype: 'passwordfld', width: 230, inputType: 'password' } ], dockedItems: [ { xtype: 'toolbar', dock: 'bottom', items: [ { xtype: 'tbfill' }, { xtype: 'cancelbutton' }, { xtype: 'savebutton', handler: function() { // 在这里用targetRecordId发起更新请求 var newPassword = this.up('window').down('passwordfld').getValue(); // 示例:提交ID和新密码的AJAX请求 // Ext.Ajax.request({ // url: '/api/update-password', // params: { id: targetRecordId, password: newPassword }, // success: function() { // me.getStore().reload(); // 成功后刷新Grid数据 // Ext.MessageBox.alert('成功', '密码更新完成'); // } // }); } } ] } ] }); } else { // 注意:me是Grid实例,调用destroy()会销毁整个Grid,建议换成关闭窗口的逻辑 // 比如通过组件查找关闭打开的密码窗口 } },
方式二:直接在回调中获取选中记录
如果不想传递参数,也可以直接在changePassword方法里通过Grid实例获取选中记录:
changePassword: function (button) { var me = this; var selectedRecord = me.getView().getSelectionModel().getFirstSelected(); if (!selectedRecord) { Ext.MessageBox.alert('提示', '请先选择一条记录'); return; } var targetRecordId = selectedRecord.get('id'); if (button === "yes") { // 后续的窗口创建和更新逻辑... } },
补充说明
- 如果你的Grid是多选模式,可以用
getSelection()方法获取所有选中记录(返回数组):var selectedRecords = me.getView().getSelectionModel().getSelection(); // 遍历数组处理每条记录 selectedRecords.forEach(record => { var id = record.get('id'); // 批量操作逻辑... }); - 一定要先判断是否有选中记录,避免出现
undefined导致的报错哦!
内容的提问来源于stack exchange,提问作者Nuri Engin
相关产品推荐
相关产品推荐

