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
代码运行次数:0
运行
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
代码运行次数:0
运行
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
代码运行次数:0
运行
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
代码运行次数:0
运行
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

复制
相关文章
【Android Gradle 插件】Gradle 自动化构建 ① ( Gradle 构建工具简介 | Gradle 构建工具用途 )
在最开始 Android 开发时 , 使用 Eclipse + ADT 进行开发 , 使用的是 Ant 构建工具 进行构建 ;
韩曙亮
2023/03/30
5410
Gradle构建提速
提速法则一览 以上优化方案基于android gradle tools 3.0-alpha 关于Santa Tracker Project 9 个模块,包括Wear 500 多个Java文件 170
我就是马云飞
2018/02/05
1.4K0
Gradle构建提速
gradle中的增量构建
在我们使用的各种工具中,为了提升工作效率,总会使用到各种各样的缓存技术,比如说docker中的layer就是缓存了之前构建的image。在gradle中这种以task组合起来的构建工具也不例外,在gradle中,这种技术叫做增量构建。
程序那些事
2021/02/25
1.1K0
gradle中的增量构建
gradle中的增量构建
在我们使用的各种工具中,为了提升工作效率,总会使用到各种各样的缓存技术,比如说docker中的layer就是缓存了之前构建的image。在gradle中这种以task组合起来的构建工具也不例外,在gradle中,这种技术叫做增量构建。
子润先生
2021/06/21
8030
gradle中的增量构建
在我们使用的各种工具中,为了提升工作效率,总会使用到各种各样的缓存技术,比如说docker中的layer就是缓存了之前构建的image。在gradle中这种以task组合起来的构建工具也不例外,在gradle中,这种技术叫做增量构建。
程序那些事
2021/02/17
1.8K0
Gradle 构建脚本
Gradle提供了一种领域特定语言,目前同时支持 Groovy 和 Kotlin 。
佛系编码
2019/12/11
9030
Gradle 构建脚本
Gradle教程和指南 – 创建Gradle构建
遵循本指南,你将创建一个Gradle项目,调用一些基本的Gradle命令,并了解Gradle如何管理项目。
全栈程序员站长
2022/09/14
1.9K0
Gradle教程和指南 – 创建Gradle构建
gradle构建工具的使用前言:一、gradle简介:二、gradle的安装:三、eclipse中配置gradle:四、使用gradle构建项目:总结:
gradle是构建工具,类似于ant和maven,也许目前maven还是主流,但是gradle却是综合了ant和maven的优点,发展速度很快,所以很有必要了解一下。
贪挽懒月
2018/08/02
2.8K0
gradle构建工具的使用前言:一、gradle简介:二、gradle的安装:三、eclipse中配置gradle:四、使用gradle构建项目:总结:
Gradle 构建多种版本
开发APP时,会有生成不同版本的需求。比如测试版本和发布版本。不同版本之间通常有不同的设置。
AnRFDev
2021/02/01
6220
如何使用Docker构建运行时间较长的脚本
我想我已经找到了一个非常不错的Docker使用案例。你是不是会觉得这是一篇写Docker有多好多好的文章,开始之前我想和你确认,这篇文章会介绍如何把文件系统作为持久性的数据结构。
星哥玩云
2022/07/03
1.5K0
【Android Gradle 插件】Android Studio 工程 Gradle 构建流程 ① ( 触发 Android Studio 工程构建 | Gradle 构建脚本执行顺序 )
最近将 Android Studio 更新到了 Android Studio Dolphin | 2021.3.1 Patch 1 版本 , 发现创建的 Android 工程中 生成的 Gradle 脚本 不一样了 , 在这里 梳理下新版本的 Gradle 执行流程 ;
韩曙亮
2023/03/28
1.2K0
【Android Gradle 插件】Android Studio 工程 Gradle 构建流程 ① ( 触发 Android Studio 工程构建 | Gradle 构建脚本执行顺序 )
Gradle构建springBoot项目
你肯定会说为什么不用maven呢,我想说,要学就学自己不会的,这样才能会的更多,不是吗。
崔笑颜
2020/07/20
2.4K0
【Android Gradle 插件】Gradle 构建生命周期 ② ( Gradle 类的添加构建生命周期监听器函数 | Gradle#addListener 函数 )
org.gradle.api.Project 配置 ( build.gradle 根配置 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html
韩曙亮
2023/03/30
7120
Gunicorn运行Python的网站非常简单
Gunicorn运行Python的网站真是非常简单了,这里介绍下django如何使用,和apache复杂配置相比,这个配置少得真不是一个数量级。
星哥玩云
2022/06/29
5150
【Android Gradle 插件】Gradle 基础配置 ② ( Gradle 空白项目构建示例演示 )
在任意一个空白目录 , 创建 build.gradle 构建脚本 , 该脚本是 Gradle 构建的入口 ;
韩曙亮
2023/03/30
5960
【Android Gradle 插件】Gradle 基础配置 ② ( Gradle 空白项目构建示例演示 )
【Android Gradle 插件】Gradle 构建工具简介 ② ( Android 项目构建打包流程 | 构建工具发展 -> 手动配置 -> Ant -> Maven -> Gradle )
① 使用 AAPT 工具 打包资源文件 , 生成 R.java , resources.ap 文件 ;
韩曙亮
2023/03/30
7490
【Android Gradle 插件】Gradle 构建工具简介 ② ( Android 项目构建打包流程 | 构建工具发展 -> 手动配置 -> Ant -> Maven -> Gradle )
Gradle For Android(4)--构建不同的版本
当构建App的时候,通常都会有不同的版本。比如说测试版本,正式版本,Debug版本等等。而这些版本通常有不同的配置,比如说服务器的域名,Log开关,付费开关等等特性。
None_Ling
2018/10/24
2K0
Gradle For Android(4)--构建不同的版本
【Android Gradle 插件】Gradle 构建机制 ① ( 空白工程 Gradle 构建文件 | IntelliJ IDEA 工程构建文件 | Android Studio 工程构建文件 )
Gradle 构建工具 的本质是 Java 应用程序 , 是运行在 Java 虚拟机 上的 ; 在空白的目录中 执行该 Gradle 构建工具 , 可以 生成一系列的构建文件 ;
韩曙亮
2023/03/30
6010
【Android Gradle 插件】Gradle 构建机制 ① ( 空白工程 Gradle 构建文件 | IntelliJ IDEA 工程构建文件 | Android Studio 工程构建文件 )
【Android Gradle 插件】Gradle 构建机制 ④ ( Gradle 构建生命周期 | 初始阶段 | 配置阶段 | 执行阶段 )
Gradle 构建生命周期 完整流程 : 下图中的函数 , 都可以作为 HOOK 点 , 监听拦截 Gradle 的执行流程 ;
韩曙亮
2023/03/30
7500
【Android Gradle 插件】Gradle 构建机制 ④ ( Gradle 构建生命周期 | 初始阶段 | 配置阶段 | 执行阶段 )
gradle构建android项目详解
1、用Gradle构建 1.1 工程结构 如图所示,这是一个不能更普通的Android的Gradle工程了。 根目录下面的settings.gradle当中主要是用来include子模块的,比如我
xiangzhihong
2018/02/01
2.3K0
gradle构建android项目详解

相似问题

gradle构建时间长- Android

07

在中构建非常长的时间

45

颤振非常长的构建时间

18

SSRS“不在”运行需要非常长的时间。

22

Gradle构建非常慢

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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