Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ExtJS4:如何使用复选框选择模型获取网格的点击单元格?

ExtJS4:如何使用复选框选择模型获取网格的点击单元格?
EN

Stack Overflow用户
提问于 2012-03-08 02:25:35
回答 2查看 7.8K关注 0票数 0

在过去的几天里,我一直在研究如何将用ExtJS3编写的应用程序转换为ExtJS4。不幸的是,我在API文档中看到ExtJS4中不再存在以下方法/事件: cellclick,getColumnModel()。

如上所述,我有一个网格面板,它使用复选框选择模型来选择网格中您想要删除的行。工作正常,但问题是,我在网格中有包含链接(Href)的单元格,需要我捕获不再存在的"cellclick“事件。因此,我注意到我可以对网格面板使用"itemclick“事件,但问题是此事件参数仅与网格的行相关。

我还需要列索引,这样我就可以确定"itemclick“事件是否发生在包含所有链接(一个href的)的列中,如果是这样,我希望处理下一步应该发生的事情。

下面是我试图转换为ExtJS4的代码

代码语言:javascript
运行
AI代码解释
复制
cellclick: function(grid,rowIndex,colIndex,e) {
    if (colIndex == 3) {
        var rec = grid.getStore().getAt(rowIndex);
        var fieldname = grid.getColumnModel().getDataIndex(colIndex + 1);
        var filename = rec.get(fieldname);

        if (!filename) return;
        var download_iframe = Ext.getCmp("report-download");
        if (!download_iframe) {
            download_iframe = document.createElement('iframe');
            download_iframe.id = 'report-download';
            download_iframe.style.display = 'none';
            download_iframe.height = '100';
            download_iframe.width = '600';
            document.body.appendChild(download_iframe);
            download_iframe.src = script to download file
        } else {
            download_iframe.src = script to download file
        }
        e.stopEvent();
    }
}

我已经能够将它转换成ExtJS4,但是缺少一个主要的代码片段,那就是检查"itemclick“事件发生在哪个单元格中的能力。

Ext JS 4版本:

代码语言:javascript
运行
AI代码解释
复制
this.control({
    'casereportGridPanel sgrid': {
        itemclick: this.downloadReport,
        selectionchange: this.toggleDelReportsBtn
    },
    .
    .
    .
    .
}

downloadReport: function(view, record, item, rowIndex, e) {
    var filename = record.data.file_name;

    if (filename) {
        if (!filename) return;
        var download_iframe = this.getDownloadContainer();
        if (!download_iframe) {
            download_iframe = document.createElement('iframe');
            download_iframe.id = 'downloadReportContainer';
            download_iframe.style.display = 'none';
            download_iframe.height = '100';
            download_iframe.width = '600';
            document.body.appendChild(download_iframe);
            download_iframe.src = script to download file
        } else {
            download_iframe.src = script to download file
        }
        e.stopEvent();
    }
},

网格配置:

代码语言:javascript
运行
AI代码解释
复制
{
    xtype: 'sgrid',
    autoScroll: true,
    border: true,
    columnLines: true,
    id: 'myreportsgrid',
    loadMask: true,
    minHeight: 100,
    selModel: Ext.create('Ext.selection.CheckboxModel',{checkOnly: true}),
        plugins: [{
            ptype: 'rowexpander',
            rowBodyTpl: [
               '<div style="border: 1px solid #CFCFCF; margin-left: 48px; padding: 0 0 8px 0;">',
                    '<div style="border: 0px solid #000; font-weight: bold; margin-left: 5px; padding: 5px 0 5px 5px; width: 200px;"><u>' + _t("case.report.grid.rowexpander.title") + '</u></div>',
                    '<table border="0" style="border-color: #666; margin-left: 5px; width: 575px;">',
                        '<tbody>',
                            '<tr>',
                                '<td style="border-color: #666; font-weight: bold; text-align: right; vertical-align: bottom; width: 75px;">' + _t("case.report.grid.rowexpander.casestatus") + ':</td>',
                                '<td style="border-color: #666; padding-left: 3px; vertical-align: bottom; width: 60px;">{case_status}</td>',
                                '<td style="border-color: #666; font-weight: bold; text-align: right; vertical-align: bottom; width: 70px;">' + _t("case.report.grid.rowexpander.startdate") + ':</td>',
                                '<td style="border-color: #666; padding-left: 3px; vertical-align: bottom;">{start_date}</td>',
                            '</tr>',
                            '<tr>',
                                '<td style="border-color: #666; font-weight: bold; text-align: right; vertical-align: bottom;">' + _t("case.report.grid.rowexpander.systemid") + ':</td>',
                                '<td style="border-color: #666; padding-left: 3px; vertical-align: bottom;">{system_ids}</td>',
                                '<td style="border-color: #666; font-weight: bold; text-align: right; vertical-align: bottom;">' + _t("case.report.grid.rowexpander.enddate") + ':</td>',
                                '<td style="border-color: #666; padding-left: 3px; vertical-align: bottom;">{end_date}</td>',
                            '</tr>',
                            '<tr>',
                                '<td style="border-color: #666; font-weight: bold; text-align: right; vertical-align: bottom;">' + _t("case.report.grid.rowexpander.parties") + ':</td>',
                                '<td style="border-color: #666; padding-left: 3px; vertical-align: bottom;" colspan="3">{parties}</td>',
                            '<tr>',
                        '</tbody>',
                    '</table>',
               '</div>'
        ]
    }],
    store: 'CaseReports',
    columns: [
        {
            dataIndex: 'id',
            hidden: true,
            renderer: this.renderText,
            sortable: true,
            text: _t('case.report.grid.id'),
            width: 30
        }, {
            dataIndex: 'report_name',
            flex: 1,
            sortable: true,
            text: _t('case.report.grid.reportName')
        }, {
            dataIndex: 'file_name',
            hidden: true,
            sortable: true,
            text: _t('case.report.grid.filename'),
            width: 200
        }, {
            dataIndex: 'date_requested',
            renderer: this.renderDate,
            sortable: true,
                    text: _t('case.report.grid.requested'),
            width: 195
        }, {
            dataIndex: 'report_status',
            renderer: this.renderText,
            sortable: true,
                    text: _t('case.report.grid.reportStatus'),
            width: 80
        }
    ],
    emptyText: '<div style="font-size: 11px; font-weight: bold; padding: 5px 0px; text-align: center;">' + _t('case.report.grid.noreports.available') + '</div>',
    dockedItems: [{
        xtype: 'toolbar',
        items: [{
            disabled: true,
            action: 'deleteReport',
            icon: SC.Url.image('delete.gif'),
            text: _t('case.report.grid.deleteReports.btn'),
            tooltip: _t('case.report.grid.deleteReports.btn.tooltip')
        }, '->', { // begin using the right-justified button container
            iconCls: 'x-tbar-loading',
            action: 'refresh',
            tooltip: _t('case.report.grid.refresh.tooltip')
        }]
    }]

如果有人能帮助我在ExtJS4中完成这项工作,我将非常感激。

提前感谢你们所有人,

肖恩

EN

回答 2

Stack Overflow用户

发布于 2012-03-09 18:25:03

不久前我回答了一个类似的问题:ExtJS 4 - Grid - Disable rowselection for specific column

网格视图有一个名为cellmousedown的事件,它接收以下参数:

  1. 视图:网格的视图
  2. 单元格:单元格的clicked
  3. cellIndex:索引记录:与单元格的存储记录相关联的存储记录

:行的cell

  1. rowIndex:索引的行<

>H115eOpts:标准事件选项对象

它是没有记录的,我只能通过源代码搜索找到它,但它就在那里。还有一个beforecellmousedown事件,它以同样的方式工作,但在事件之前触发,返回false会阻止任何进一步的事件。你可以这样做:

代码语言:javascript
运行
AI代码解释
复制
viewConfig: {
    listeners: {
        cellmousedown: function(view, cell, cellIdx, record, row, rowIdx, eOpts){
            if(cellIdx === 3){
                // Your converted code here
            }
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2012-03-08 05:33:34

我认为问题在于checkboxmodel是从rowselect扩展而来的,它选择整行而不是单个单元格。

我甚至可以通过使用每个选择事件提供的事件对象来拾取单击的目标,而不管它是单元格类型还是行类型。有点像这样:event.getTarget().hash --这里我想要的是一个链接的散列属性。希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9612101

复制
相关文章
字符,字符集,字符编码
现在Unicode已然一统天下,我想很多年轻的程序员可能都没遇到过编码问题,更不用说了解编码的发展了。前些日子在一个老网站上偶遇乱码,虽然入行时间不短,但对其究竟也是不甚了解,好奇心驱使下落入深坑。还好经过一段时间的摸爬滚打,边学边写,总算大概理清了个脉络,记录之,分享之。
_春华秋实
2019/02/22
1.6K0
字符,字符集,字符编码
linux中计算行数,字数,字符数的10个wc命令示例
wc命令的功能为统计指定文件中的字节数、字数、行数, 并将统计结果显示输出。 # wc [options] filenames 以下是该命令提供的选项和用法。 -c, --bytes 输出目标文件中字节的计数结果 -m, --chars 输出目标文件的中字符的计数结果 -l, --lines 输出目标文件中 行 的计数结果 --files0-from=F 从NUL-terminated指明的名字在文件F中的文件中读取,如
入门笔记
2022/06/02
9270
[每日一题]字符数组
前面的题基本都是数组里面存数字,相信大家也基本练习的差不多了,今天给大家推荐的一题呢,比较简单,但可以算是数组存字符的一个开始吧!懂的同学可以忽略! 题目描述 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。 输入 数字n 一行字符串 数字m 输出 从m开始的子串 样例输入 6 abcdef 3 样例输出 cdef PS:详细题解见C语言网1048题 另外,有兴趣的同学还可以加入C语言网官方微信群,一起讨论C语言 有找密码或者其他问题也可以到里面找相关人员解
编程范 源代码公司
2018/04/18
8980
字符数组
char message[5] = {'H', 'e', 'l', 'l', 'o'};
pigeon
2022/04/11
4600
字符数组
字符集和字符编码
我们都知道在计算机内部,所有的数据在存储和运算的时候都应该使用二进制进行表示。例如字母,数字等等。通过二进制进行表示,我们可以指定很多规则来表示这些字符,为了避免不一致性,美国国家标准学会(American National Standard Institute , ANSI )制定了 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)编码。
用户7657330
2020/08/14
1.1K0
字符数组反转_字符数组的初始化
关于字符串的反转,倒是很简单,但是编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
全栈程序员站长
2022/08/18
1.2K0
字符集
本文主要讲解字符集和字符编码的一些概念,通常我们所说的字符集其实指的包含了字符编码集+字符编码。但字符集有时候有时候又只是字符编码集的简称,具体语义根据上下文判断理解就行,也不是必须分的很清楚。
@阿诚
2020/09/01
1.8K0
字符集
字符集与字符编码总结
转载请注明出处。请前往 Tiga on Tech 查看原文以及更多有趣的技术文章。
Tiga
2020/01/23
1.2K0
字符集与字符编码总结
6.3 字符数组
1、对字符数组初始化,最容易理解的方式是用“初始化列表”,把各个字符依次赋给数组中各元素。
小林C语言
2019/07/12
6530
5.3 字符数组
注意:用“”%s”格式符输入输出字符串时,printf函数中的输出项是字符数组名而不是数组元 素名
小林C语言
2019/08/19
5600
ASP数组排序_字符数组
<% ‘===================================== ‘作者:80端口,阿里西西 ‘时间:2005-12-23 ‘作用:对数据进行重新排序 ‘===================================== Function NewOrder(sz) Dim ali,icount,i,ii,j,itemp ali=split(sz,”,”) icount=UBound(ali) For i=0 To icount For j=icount – 1 To i Step -1 If j+1 <= UBound(ali) Then If int(ali(j))<int(ali(j+1)) Then itemp=ali(j) ali(j)=ali(j+1) ali(j+1)=itemp End If End If Next Next For ii=0 to Ubound(ali) If ii = Ubound(ali) Then NewOrder = NewOrder & ali(ii) Else NewOrder = NewOrder & ali(ii) & “,” End If Next End Function %>
全栈程序员站长
2022/11/01
3.4K0
去除字符数组中指定的字符
比较实用的小程序,备份记录。 //去除字符串中指定字符 static void Delete_Char(char str[],char target) {         uint8_t i,j;         for(i=j=0;str[i]!='\0';i++)         {             if(str[i]!=target)             {                 str[j++]=str[i];             }         }         s
Winter_world
2020/09/25
1.5K0
C语言数组——字符数组
字符数组顾名思义就是数组的元素类型为字符型的数组。特殊之处在于它是数组元素为字符的数组。其定义的一般形式和注意事项与之前讲解的一般数组类似,只是其中的类型说明符是char。当然,并不是说类型说明符只能是char,也可以是long、int等,但是由于char型只占用一个字节的大小,使用long型和int型来定义字符数组会造成资源的浪费,因此一般选择使用char型来定义字符数组。
C语言中文社区
2022/05/30
7.6K0
C语言数组——字符数组
29:统计字符数
29:统计字符数 总时间限制: 1000ms 内存限制: 65536kB描述 给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。 输入输入包含一行,一个字符串,长度不超过1000。输出输出一行,包括出现次数最多的字符和该字符出现的次数,中间以一个空格分开。如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符。样例输入 abbccc 样例输出 c 3 来源1744 1 #include<iostream> 2 #include<cstdio
attack
2018/04/03
1K0
C语言数组——字符数组
C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 VS2019编写简单的C程序示例 简单示例,VS2019调试C语言程序 C语言基础-基本算法 C语言基础-数据类型 C语言中的输入输出函数 C语言流程控制语句 C语言数组——一维数组 C语言数组——二维数组
全栈程序员站长
2022/09/08
6.2K0
C语言数组——字符数组
字符集和字符编码(Charset & Encoding)
计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照何种规则将字符存储在计算机中,如’a’用什么表示,称为”编码”;反之,将存储在计算机中的二进制数解析显示出来,称为”解码”,如同密码学中的加密和解密。在解码过程中,如果使用了错误的解码规则,则导致’a’解析成’b’或者乱码。
空空云
2018/09/27
1.9K0
字符集和字符编码(Charset & Encoding)
java字符集
1、JVM中单个字符占用的字节长度跟编码方式有关,而默认编码方式又跟平台是一一对应的或说平台决定了默认字符编码方式;
西门呀在吹雪
2020/11/09
2.2K0
MySQL 字符集
MySQL 支持多种字符集,使您能够使用各种字符集存储数据,并根据给定排序规则执行比较。
恋喵大鲤鱼
2023/10/12
3390
理清字符集和字符编码关系
计算机内部由集成电路(Integrated Circuit,IC)构成,IC的所有引脚,只有直流电压0V和5V两个状态。也就是说,IC的一个引脚,只能表示两个状态。正是由于这个原因,决定了计算机的信息只能用二进制数处理。
木可大大
2018/04/10
1.7K7
理清字符集和字符编码关系
C++字符数组存放字符串 | 字符指针变量
C++指向数组的指针作函数参数  一维数组名可以作为函数参数传递,多维数组名也 可作函数参数传递。  C++用字符数组存放一个字符串 在C++中可以用多种方法访问一个字符串,第一种字符数组: #include<iostream>//预处理 using namespace std;//命名空间  int main()//主函数  {   char str[]="关注:C语言入门到精通";   cout<<str<<endl;    return 0; //函数返回值为0; } 编译运行结果: 关注:C语言入
小林C语言
2020/12/18
1.3K0
C++字符数组存放字符串 | 字符指针变量

相似问题

在字符数组程序集X86 embedded中获取索引位置的字符

20

字符串搜索,x86程序集

12

程序集x86逐字符读取字符串。

12

移动字符数组的值以注册x86内联程序集

20

如何在C中计算字符数组中输入的字符数

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文