Ext Grid 报表锁定列+多表头的设计与实现(一)

首先找到Ext源码包下lockingGridView.js(我会放到附件中)

这个插件的目的在于实现Grid的锁定列效果。使用起来也很简单,只需要建立一个LockingColumnModel。它继承了Ext中的ColumnModel,并且添加了几个方法用来判断该列是否被锁住、设置该列是否锁住、获取冻结列宽、获取冻结列个数、移除列方法

Ext.ux.grid.LockingColumnModel = Ext.extend(Ext.grid.ColumnModel, {
    isLocked : function(colIndex){
        return this.config[colIndex].locked === true;
    },
    
    setLocked : function(colIndex, value, suppressEvent){
        if(this.isLocked(colIndex) == value){
            return;
        }
        this.config[colIndex].locked = value;
        if(!suppressEvent){
            this.fireEvent('columnlockchange', this, colIndex, value);
        }
    },
    
    getTotalLockedWidth : function(){
        var totalWidth = 0;
        for(var i = 0, len = this.config.length; i < len; i++){
            if(this.isLocked(i) && !this.isHidden(i)){
                totalWidth += this.getColumnWidth(i);
            }
        }
        return totalWidth;
    },
    
    getLockedCount : function(){
        for(var i = 0, len = this.config.length; i < len; i++){
            if(!this.isLocked(i)){
                return i;
            }
        }
    },
    
    moveColumn : function(oldIndex, newIndex){
        if(oldIndex < newIndex && this.isLocked(oldIndex) && !this.isLocked(newIndex)){
            this.setLocked(oldIndex, false, true);
        }else if(oldIndex > newIndex && !this.isLocked(oldIndex) && this.isLocked(newIndex)){
            this.setLocked(oldIndex, true, true);
        }
        Ext.ux.grid.LockingColumnModel.superclass.moveColumn.apply(this, arguments);
    }
});

之后我们还需要在定义的gridPanel中去定义使用的插件

plugins:[new Ext.ux.plugins.LockedGroupHeaderGrid()]
这时,我们还需要在之前定义好的LockingColumnModel中设置冻结的列。很简单,加上locked:true就可以了

var cm = new Ext.ux.grid.LockingColumnModel({
		header : 'AAA',
		dataIndex : 'aaa',
		locked: true
	});
让我们看一下效果,应该已经成功了吧?

不能上传附件,大家要是有需要lockingGridView的可以直接从源码包里去找,或者直接找我要。我的邮箱:gjy891230@163.com。微博:http://weibo.com/1951639197

今天先写到这里,明天再写上后半段关于如何实现锁定列和多表头的整合,我也还处于研究阶段.

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
非常感谢您的提问!以下是一个基于 Ext JS 6 的连接电脑摄像头实现拍照保存录像功能示例: ``` // create video element var videoElement = Ext.create('Ext.dom.Element', { tag: 'video', width: 480, height: 320 }); // add video element to panel var panel = Ext.create('Ext.panel.Panel', { title: 'Camera', items: [videoElement], buttons: [ { text: 'Take Photo', handler: function() { // create canvas element var canvasElement = Ext.create('Ext.dom.Element', { tag: 'canvas', width: videoElement.getWidth(), height: videoElement.getHeight() }); // draw video frame on canvas canvasElement.dom.getContext('2d').drawImage(videoElement.dom, 0, 0, videoElement.getWidth(), videoElement.getHeight()); // save canvas as image Ext.ux.saveAs({ data: canvasElement.dom.toDataURL(), filename: 'photo.png' }); } }, { text: 'Record Video', handler: function() { // create media stream navigator.mediaDevices.getUserMedia({ video: true }).then(function(stream) { // play media stream on video element videoElement.dom.srcObject = stream; videoElement.dom.play(); // start recording var mediaRecorder = new MediaRecorder(stream); var chunks = []; mediaRecorder.ondataavailable = function(event) { chunks.push(event.data); }; mediaRecorder.onstop = function() { // save video as blob var blob = new Blob(chunks, { type: 'video/mp4' }); Ext.ux.saveAs({ data: URL.createObjectURL(blob), filename: 'video.mp4' }); }; mediaRecorder.start(); }).catch(function(error) { console.error(error); }); } } ] }); Ext.create('Ext.container.Viewport', { layout: 'fit', items: [panel] }); ``` 希望这个示例对您有所帮助!如果您还有其他问题或需要更多帮助,请随时联系我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

justcoding_

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值