关于Ext.grid.CheckboxSelectionModel点击事件时无法获得当前选择列的数据值

本文介绍了一种解决表格中选中行不准确的问题的方法。通过优化代码逻辑,确保每次选中行时都能正确获取所需的ID,避免重复或遗漏。

问题:页面选择一列。

如左边的灰色行,进入连接,得到起ID,比如是123,然后选择另外一列,得到的ID居然还是123

 

代码:这是以前的代码修订的,很乱,但是将就看吧,没办法,以前他们做的项目,现在拿来改起来真的是相当的头痛。

//得到选中的行这里进行了两次选中,无语。当然可以直接去掉合并成一个,这里只是为了还原当时的情况,所以保留到这里。程序中删除。

       if(Grid.selectedRow==null){

           Grid.selectedRow = Grid.grid.getSelectionModel().getSelected();//左键点选或勾选的行

       }else{//2011-04-26

           Grid.selectedRow = Grid.grid.getSelectionModel().getSelected();//这里我直接晕掉,它直接都从新加载了,可是还是会存在以前的记录为选中,不知道咋搞,直接让他重选。无语

 

合并为以前就用if语句就可以,现在必须用整体用它,其他代码难得看了,看的我脑壳好大。。。。。

Grid.selectedRow = Grid.grid.getSelectionModel().getSelected();

 

dealOnclicks : function(){

   

       //得到选中的行这里进行了两次选中,无语。当然可以直接去掉合并成一个,这里只是为了还原当时的情况,所以保留到这里。程序中删除。

       if(Grid.selectedRow==null){

           Grid.selectedRow = Grid.grid.getSelectionModel().getSelected();//左键点选或勾选的行

       }else{//2011-04-26

           Grid.selectedRow = Grid.grid.getSelectionModel().getSelected();//这里我直接晕掉,它直接都从新加载了,可是还是会存在以前的记录为选中,不知道咋搞,直接让他重选。无语

       }

       //var taskRule = Grid.selectedRow.data.taskRule;

       var linktoids = Grid.selectedRow.data['recordId'];

       //var doflags = Grid.selectedRow.data.opflag;

       //if(doflags==0){

           Ext.Ajax.request({

           //请求地址。注意:路径

               url:'<%=webapp%>/servlet/DoHttpServlet?action=dealsCheck&flag=http&ids=' + linktoids,

           //成功时回调

               success: function(response, options) {

               //获取响应的json字符串

               var responseArray = Ext.util.JSON.decode(response.responseText);

               if(responseArray.success==true){

               Grid.ds.reload();

          }

          }

           });

       //}

      

       //这里的返回没有效果,所以出现了问题,

   

},

在使用 ExtJS 创建 `GridPanel` ,界面上出现多余的按钮通常是由于某些配置项或渲染器(renderer)中的逻辑未正确设置,导致额外的 HTML 元素被渲染为按钮样式或被误认为是按钮。以下是一些常见的原因和对应的解决方案: ### 1. 自定义渲染器中错误地添加了按钮元素 如果在 `renderer` 函数中手动添加了 `<input>` 或 `<button>` 元素,但未正确控制其显示逻辑,可能会导致多余的按钮被渲染。例如,在引用[2]中提到的单选按钮渲染方式,若未正确绑定数据或未处理的配置,可能导致多个按钮被重复渲染[^2]。 ```javascript renderer: function(value, metaData, record, rowIndex, colIndex, store, view) { var column = view.getGridColumns()[colIndex], html = ''; Ext.each(column.radioValues, function(rec) { var inputValue = rec.inputValue; var boxLabel = rec.boxLabel; var checked = inputValue == value; var name = view.id + "_Grid_Column_Radio_" + record.internalId + "_" + rowIndex; html += "<input name='" + name + "' type='radio' " + (checked ? "checked" : "") + " dataindex='" + column.dataIndex + "' value='" + inputValue + "' />" + boxLabel; }); return html; } ``` 如上代码所示,若未正确处理 `radio` 按钮的 `name` 属性或未限制每行仅渲染一组按钮,可能导致每都渲染出额外的按钮。 ### 2. 误用了选择模型(SelectionModel) 在引用[1]和[3]中,使用了 `Ext.grid.CheckboxSelectionModel` 来实现复选框[^1]。如果该选择模型被错误地添加到 `ColumnModel` 中多次,或者与其它渲染逻辑冲突,也可能导致界面上出现多余的按钮或复选框。 ```javascript var sm = new Ext.grid.CheckboxSelectionModel(); var cm = new Ext.grid.ColumnModel([ // ... 其它定义 sm // 添加复选框 ]); ``` 确保 `CheckboxSelectionModel` 仅被添加一次,并且未与其他自定义渲染逻辑冲突。 ### 3. 使用了兼容的插件或扩展组件 某些第三方插件或自定义组件可能在 `GridPanel` 中注入了额外的按钮或控件。检查是否引入了必要的扩展,或在 `GridPanel` 的 `plugins` 配置中误加了按钮组件。 ### 4. CSS 样式干扰 有,即使没有实际的按钮元素,错误的 CSS 样式也可能导致某些 `<div>` 或 `<span>` 被渲染成按钮样式。检查浏览器的开发者工具(如 Chrome DevTools)确认这些“按钮”是否为实际的 `<button>` 或 `<input type="button">` 元素。 ### 5. 数据绑定错误 在使用 `dataIndex` 或 `renderer` ,如果绑定的数据字段存在或格式正确,可能触发默认渲染逻辑,生成非预期的 UI 元素。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值