You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:40:02