ExtJS技术咨询:toggle后如何获取rowwidget选中行的值?
获取ExtJS RowWidget选中行数据(Toggle操作后)
嘿,我懂你遇到的问题——在ExtJS里触发RowWidget的toggle操作后,要获取对应选中行的数据对吧?之前试了bind没效果,其实完全不用绕bind的路子,咱们用更直接的方法就能搞定!
方法1:监听RowWidget的toggle事件(最精准)
RowWidget本身自带toggle事件,触发展开/收起时会直接返回对应的行记录,这是最直接的方式。你可以在Grid的RowWidget插件配置里直接加监听:
Ext.create('Ext.grid.Panel', { // 你的Grid基础配置 columns: [/* 列定义 */], plugins: [{ ptype: 'rowwidget', widget: { // 你的行内组件配置,比如表单、子Grid等 xtype: 'form', items: [/* 组件项 */] }, listeners: { toggle: function(rowWidget, expanded, record) { // 这里的record就是触发toggle的行对应的完整数据记录! if (expanded) { // 展开时获取数据,想怎么用都行 console.log('当前行数据:', record.getData()); // 要是需要给行内组件赋值,直接用record就行 rowWidget.widget.getForm().loadRecord(record); } } } }], // 其他Grid配置... });
方法2:通过Grid选择模型获取(适合已选中行的场景)
如果你的Grid开启了行选择功能(比如配置了selModel: 'rowmodel'),也可以在toggle操作后,直接从选择模型里拿到选中行的数据:
// 假设你有Grid的实例引用gridInstance const selectedRecords = gridInstance.getSelectionModel().getSelected(); selectedRecords.forEach(record => { console.log('选中行数据:', record.getData()); });
不过这个方法更适合已经手动选中行的场景,如果只是toggle展开行但没选中,还是方法1更精准。
为啥bind没用?
Bind主要是用于组件间的双向数据绑定,而RowWidget的toggle本质是视图交互动作,直接通过事件监听拿到触发源的记录才是最贴合场景的方案,确实没必要强行用bind绕弯路。
内容的提问来源于stack exchange,提问作者Asanda Lamba
相关产品推荐
相关产品推荐

