extjs表格行拖动插件

Ext.ux.GridDragDropRowOrder = Ext.extend(Ext.util.Observable, {
	copy : false,

	scrollable : false,

	constructor : function(config) {
		if (config)
			Ext.apply(this, config);

		this.addEvents({
					beforerowmove : true,
					afterrowmove : true,
					beforerowcopy : true,
					afterrowcopy : true
				});

		Ext.ux.GridDragDropRowOrder.superclass.constructor.call(this);
	},

	init : function(grid) {
		this.grid = grid;
		grid.enableDragDrop = true;

		grid.on({
					render : {
						fn : this.onGridRender,
						scope : this,
						single : true
					}
				});
	},

	onGridRender : function(grid) {
		var self = this;

		this.target = new Ext.dd.DropTarget(grid.getEl(), {
			ddGroup : grid.ddGroup || 'GridDD',
			grid : grid,
			gridDropTarget : this,

			notifyDrop : function(dd, e, data) {
				if (this.currentRowEl) {
					this.currentRowEl.removeClass('grid-row-insert-below');
					this.currentRowEl.removeClass('grid-row-insert-above');
				}
                
				var t = Ext.lib.Event.getTarget(e);
				var rindex = this.grid.getView().findRowIndex(t);
				
				if (rindex === false || rindex == data.rowIndex) {
					return false;
				}
				if (this.gridDropTarget.fireEvent(self.copy
								? 'beforerowcopy'
								: 'beforerowmove', this.gridDropTarget,
						data.rowIndex, rindex, data.selections, 123) === false) {
					return false;
				}

				var ds = this.grid.getStore();

				var selections = new Array();
				var keys = ds.data.keys;
				for (var key in keys) {
					for (var i = 0; i < data.selections.length; i++) {
						if (keys[key] == data.selections[i].id) {
							if (rindex == key) {
								return false;
							}
							selections.push(data.selections[i]);
						}
					}
				}
				var targetRecord = this.grid.store.getAt(rindex);
				
				if (rindex > data.rowIndex && this.rowPosition < 0) {
					rindex--;
				}
				if (rindex < data.rowIndex && this.rowPosition > 0) {
					rindex++;
				}

				if (rindex > data.rowIndex && data.selections.length > 1) {
					rindex = rindex - (data.selections.length - 1);
				}

				if (rindex == data.rowIndex) {
					return false;
				}
				if (!self.copy) {
					for (var i = 0; i < data.selections.length; i++) {
						ds.remove(ds.getById(data.selections[i].id));
					}
				}

				for (var i = selections.length - 1; i >= 0; i--) {
					var insertIndex = rindex;
					ds.insert(insertIndex, selections[i]);
				}
				var sm = this.grid.getSelectionModel();
				if (sm) {
					sm.selectRecords(data.selections);
				}
				this.gridDropTarget.fireEvent(self.copy
								? 'afterrowcopy'
								: 'afterrowmove', this.gridDropTarget,
						data.rowIndex, rindex, data.selections,this.grid.store);
				return true;
			},

			notifyOver : function(dd, e, data) {
				var t = Ext.lib.Event.getTarget(e);
				var rindex = this.grid.getView().findRowIndex(t);
				var ds = this.grid.getStore();
				var keys = ds.data.keys;
				for (var key in keys) {
					for (var i = 0; i < data.selections.length; i++) {
						if (keys[key] == data.selections[i].id) {
							if (rindex == key) {
								if (this.currentRowEl) {
									this.currentRowEl
											.removeClass('grid-row-insert-below');
									this.currentRowEl
											.removeClass('grid-row-insert-above');
								}
								return this.dropNotAllowed;
							}
						}
					}
				}
				if (rindex < 0 || rindex === false) {
					if(this.currentRowEl)
					this.currentRowEl.removeClass('grid-row-insert-above');
					return this.dropNotAllowed;
				}

				try {
					var currentRow = this.grid.getView().getRow(rindex);
					var resolvedRow = new Ext.Element(currentRow).getY()
							- this.grid.getView().scroller.dom.scrollTop;
					var rowHeight = currentRow.offsetHeight;
					this.rowPosition = e.getPageY() - resolvedRow
							- (rowHeight / 2);

					if (this.currentRowEl) {
						this.currentRowEl.removeClass('grid-row-insert-below');
						this.currentRowEl.removeClass('grid-row-insert-above');
					}

					if (this.rowPosition > 0) {
						this.currentRowEl = new Ext.Element(currentRow);
						this.currentRowEl.addClass('grid-row-insert-below');
					} else {
						if (rindex - 1 >= 0) {
							var previousRow = this.grid.getView().getRow(rindex
									- 1);
							this.currentRowEl = new Ext.Element(previousRow);
							this.currentRowEl.addClass('grid-row-insert-below');
						} else {
							this.currentRowEl.addClass('grid-row-insert-above');
						}
					}
				} catch (err) {
					console.warn(err);
					rindex = false;
				}
				return (rindex === false)
						? this.dropNotAllowed
						: this.dropAllowed;
			},
			notifyOut : function(dd, e, data) {
				if (this.currentRowEl) {
					this.currentRowEl.removeClass('grid-row-insert-above');
					this.currentRowEl.removeClass('grid-row-insert-below');
				}
			}
		});
		if (this.targetCfg) {
			Ext.apply(this.target, this.targetCfg);
		}
		if (this.scrollable) {
			Ext.dd.ScrollManager.register(grid.getView().getEditorParent());
			grid.on({
						beforedestroy : this.onBeforeDestroy,
						scope : this,
						single : true
					});
		}
	},
	getTarget : function() {
		return this.target;
	},
	getGrid : function() {
		return this.grid;
	},
	getCopy : function() {
		return this.copy ? true : false;
	},
	setCopy : function(b) {
		this.copy = b ? true : false;
	},
	onBeforeDestroy : function(grid) {
		Ext.dd.ScrollManager.unregister(grid.getView().getEditorParent());
	}
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下代码向 ExtJS 表格添加: var grid = Ext.getCmp('gridId'); // 获取表格对象 var store = grid.getStore(); // 获取表格数据源 var record = Ext.create('ModelName', { // 创建新的数据模型 field1: 'value1', field2: 'value2', // ... }); store.add(record); // 将新添加到数据源中 grid.getView().refresh(); // 刷新表格视图,显示新 ### 回答2: ExtJS是一个流的JavaScript框架,用于构建富客户端的Web应用程序。在ExtJS中,可以使用Grid组件来创建表格,并通过代码添加。以下是一个示例代码,展示如何使用ExtJS添加表格中: ```javascript // 创建一个store来保存表格数据 var store = Ext.create('Ext.data.Store', { fields: ['name', 'age', 'gender'], // 定义列字段 // 初始化数据 data: [ {name: '张三', age: 25, gender: '男'}, {name: '李四', age: 30, gender: '女'}, {name: '王五', age: 28, gender: '男'} ] }); // 创建一个表格,并关联上面创建的store var grid = Ext.create('Ext.grid.Panel', { store: store, columns: [ {text: '姓名', dataIndex: 'name'}, {text: '年龄', dataIndex: 'age'}, {text: '性别', dataIndex: 'gender'} ], renderTo: Ext.getBody() }); // 添加新 var newRow = {name: '赵六', age: 35, gender: '女'}; store.add(newRow); ``` 以上代码中,首先创建了一个store对象,用于保存表格数据。然后创建了一个表格组件,指定了store和列字段。最后通过store的add方法添加了一数据。运以上代码,就可以在表格中看到新添加的。 需要注意的是,以上代码只是一个简单的示例,实际应用中可能还需要做一些额外的处理,例如数据校验、数据请求等。具体使用时,可以根据自己的需求进调整。 ### 回答3: 在ExtJS中,要向表格添加可以通过使用store的add方法来实现。以下是一个示例代码: ```javascript // 创建一个store var store = Ext.create('Ext.data.Store', { fields: ['name', 'age', 'gender'], data: [ { name: '张三', age: 20, gender: '男' }, { name: '李四', age: 25, gender: '女' } ] }); // 创建一个表格 var grid = Ext.create('Ext.grid.Panel', { store: store, columns: [ { header: '姓名', dataIndex: 'name', flex: 1 }, { header: '年龄', dataIndex: 'age', flex: 1 }, { header: '性别', dataIndex: 'gender', flex: 1 } ] }); // 创建一个按钮,点击后向表格添加 var addButton = Ext.create('Ext.button.Button', { text: '添加', handler: function() { // 创建一个新记录 var record = Ext.create('Ext.data.Model', { name: '王五', age: 30, gender: '男' }); // 向store中添加记录 store.add(record); } }); ``` 在这个代码中,首先我们创建了一个store来存储表格的数据,然后创建了一个表格,并将store绑定到表格上。接着创建了一个按钮,当点击按钮时,会创建一个新的记录,并通过store的add方法将记录添加到表格中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值