W2UI设置记录editable属性为false不生效问题求助
W2UI Grid 行级编辑权限控制可行方案
以下是经过实测可用的实现方式,可完美解决editable配置不生效的问题:
核心实现方案:通过onBeforeEdit事件拦截编辑行为
这是目前兼容性最高、自定义性最强的实现方式,不受W2UI版本限制:
- 首先正常配置列级
editable: true开启列编辑权限 - 给需要控制编辑权限的记录增加自定义标识字段(比如
editable),标记该条记录是否允许编辑 - 绑定
onBeforeEdit事件,拦截编辑请求,不符合编辑条件的直接阻止事件
示例代码:
$('#yourGrid').w2grid({ name: 'yourGridName', columns: [ { field: 'id', text: '序号', size: '60px' }, { field: 'title', text: '内容标题', editable: true, size: '300px' }, { field: 'status', text: '状态', size: '100px' } ], records: [ { recid: 1, id: 1, title: '草稿内容可编辑', status: '草稿', editable: true }, { recid: 2, id: 2, title: '已发布内容不可编辑', status: '已发布', editable: false }, { recid: 3, id: 3, title: '草稿内容2可编辑', status: '草稿', editable: true } ], // 核心拦截逻辑 onBeforeEdit: function (event) { const currentRecord = this.get(event.recid) // 可根据业务需求自定义判断规则,比如判断状态字段、权限字段等 if (currentRecord && currentRecord.editable === false) { event.preventDefault() return false } } })
可选优化:增加不可编辑视觉提示
给不可编辑的行增加禁用样式,避免用户误解:
在不可编辑的记录中添加className: 'w2ui-disable'配置即可,示例:
{ recid: 2, id: 2, title: '已发布内容不可编辑', status: '已发布', editable: false, className: 'w2ui-disable' }
注意事项
- 列级的
editable配置是全局生效的,不要尝试动态修改列配置控制单条记录的编辑权限,会影响所有行 - 如果需要控制单元格级别的编辑权限,只需要在
onBeforeEdit事件中增加event.column.field的判断即可实现单条记录某一列不可编辑 - 官方演示Demo失效是因为旧版行级
editable内置配置已在版本迭代中被废弃,事件拦截是W2UI维护组推荐的标准实现方式
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

