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

ExtJS表格上下文菜单中根据行状态动态调用对应控制器函数的实现方法问询

解决方案:动态切换上下文菜单的调用函数

你已经搞定了菜单文本的动态切换,只需要再把点击事件绑定的函数也改成动态的就行,核心思路就是根据enabled的值来决定使用disableRule还是enableRule。

修改后的完整代码

itemcontextmenu: function (grid, record, item, index, e) { 
    var enabled = grid.getStore().getAt(index).get('enabled') == 1 ? true : false; 
    // 动态确定要调用的函数名
    var actionFn = enabled ? 'disableRule' : 'enableRule';
    var gridText = enabled ? 'Disable' : 'Enable'; // 用三元表达式简化文本判断
    
    var contextMenu = Ext.create('Ext.menu.Menu', { 
        controller: "administration-ipaccessmanagement", 
        width: 100, 
        plain: true, 
        items: [{ 
            text: 'Delete', 
            listeners: { 
                click: {fn: 'deleteRule', extra: record} 
            } 
        },{ 
            text: gridText, 
            listeners: { 
                click: {fn: actionFn, extra: record} // 绑定动态确定的函数名
            } 
        } ] 
    }); 
    e.stopEvent(); 
    contextMenu.showAt(e.getXY()); 
}

关键改动说明

  1. 动态定义函数名变量:新增actionFn变量,通过三元表达式根据enabled状态判断——当行是启用状态时,用disableRule;反之则用enableRule。
  2. 绑定动态函数名:把原来写死的'disableRule'替换成actionFn变量,让点击事件自动适配当前行的状态。
  3. 简化文本赋值:把原来的if-else判断改成三元表达式,让代码更简洁,逻辑一目了然。

这样修改后,点击菜单时就会根据当前行的enabled状态,自动调用对应的控制器函数了。

内容的提问来源于stack exchange,提问作者rrahul789

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:57:31