`

Ext 中由Combobox和itemselector组成的editorGrid

    博客分类:
  • Ext
阅读更多
var win;
var operateGridPanel;
var _recordIndex = 0;// 编辑的行号
var _recordChangeTypeId;// 编辑的行的切换类型ID

/**
 * 动态生成Store
 * 
 * @param {Object}
 *            param
 * @param {Object}
 *            loadFlag
 * @return {TypeName}
 */
function getStore(param, loadFlag) {
	return new Ext.data.JsonStore({
		url : "/bsapp/service/xml/xmloperation.action" + param,
		autoLoad : loadFlag,
		pruneModifiedRecords : true,
		fields : ['name', 'title'],
		root : 'data',
		method : 'GET'
	});
};

/**
 * Ext.form.ComboBox
 */
var combo = new Ext.form.ComboBox({
	id : 'combo',
	hiddenName : 'comboValue',// 隐藏域的name
	hiddenId : 'comboValue',// 隐藏域的ID
	hiddenValue : 'value',// 隐藏域的值 如果不设置,getValue()得到的是显示的值
	fieldLabel : "切换类型",
	displayField : 'title',// 显示的值
	valueField : 'name',// 隐藏的值
	selectOnFocus : true,
	typeAhead : true,
	triggerAction : 'all',
	readonly : true,
	editable : false,
	allowBlank : false,
	blankText : "请选择切换类型"// 只读
});

/**
 * Ext.grid.GridPanel Store的Field
 */
var operateFiled = [{
	name : 'changeTypeId',
	type : 'String'
}, {
	name : 'changeTitle',
	type : 'String'
}, {
	name : 'KPIMap',
	type : 'String'
}, {
	name : 'KPI',
	type : 'String'
}];

/**
 * Grid的Store
 * 
 * @param {Object}
 *            v
 * @return {TypeName}
 */
var operateStore = new Ext.data.Store({
	reader : new Ext.data.JsonReader({
		totalProperty : 'totalCount',// 该属性是指定记录集的总数(可选的)
		root : 'list',// 该属性是指定包含所有行对象的数组
		fields : operateFiled

	}),
	remoteSort : true,
	pruneModifiedRecords : true
});

/**
 * GridPanel的checkBoxModel
 */
var checkModel = new Ext.grid.CheckboxSelectionModel({
	handleMouseDown : Ext.emptyFn
// 只能选择CHECKBOX选中一行
});
/**
 * Ext.grid.GridPanel Column
 */
var operateColumn = new Ext.grid.ColumnModel({
			columns : [checkModel, {
				header : "切换类型",
				dataIndex : 'changeTypeId',
				width : 100,
				editor : combo,
				renderer : function(v) {
					// 渲染图片至单元格操作
					if (v != null && v != "") {
						// 通过隐藏值来找出这行RECORD 从而得出显示的值
						var _record = combo.getStore().getAt(combo.getStore()
								.find(combo.valueField, v));
						return _record.get(combo.displayField);
					}
				}
			}, {
				// 隐藏列,存放切换的title,用于查询结果的tabPanel的title值
				id : 'changeTitle',
				header : "切换显示值",
				hidden : true,
				width : 30,
				dataIndex : 'changeTitle'

			}, {
				id : 'KPIMap',
				header : "指标值",
				hidden : true,
				width : 30,
				dataIndex : 'KPIMap'
			}, {
				header : "指标",
				width : 720,
				dataIndex : 'KPI'
			}, {
				header : "<img  style='align:center;'  "
						+ "src='/bsapp/extjs/resources/images/default/dd/"
						+ "drop-add.gif' onclick='addKPIToGrid();'/>",
				width : 50,
				dataIndex : '',
				align : 'center',
				renderer : function(v) {
					// 渲染图片至单元格操作
					return "<img src='/bsapp/images/bsapp/capablitity/basic/images/deleteAll.gif'/>";
				}
			}]
		});

/**
 * 添加KPI指标到Grid (插入时需要改变下拉选择框)
 */
function addKPIToGrid() {
	if (combo.getStore().getCount() > 0) {
		if (operateGridPanel.getStore().getCount() < combo.getStore()
				.getCount()) {

			var record = new Ext.data.Record([{
				name : 'changeTypeId',
				type : 'String'
			}, {
				name : 'changeTitle',
				type : 'String'
			}, {
				name : 'KPIMap',
				type : 'int'
			}, {
				name : 'KPI',
				type : 'string'
			}]);
			// record.data['changeTypeId'] = '';
			record.data['KPIMap'] = '';
			record.data['KPI'] = '';

			operateGridPanel.getStore().add(record);
		} else {
			Ext.MessageBox.show({
						title : "友情提示",
						msg : "不能超过切换类型的个数",
						buttons : Ext.Msg.OK,
						width : 260,
						icon : Ext.MessageBox.WARNING
					});
		}
	} else {
		Ext.MessageBox.show({
					title : "友情提示",
					msg : "没有相应的切换类型",
					buttons : Ext.Msg.OK,
					width : 260,
					icon : Ext.MessageBox.ERROR
				});
	}
};
/*
 * Ext.ux.form.ItemSelector
 */
var isForm = new Ext.form.FormPanel({
			frame : true,
			bodyStyle : 'padding:5px;',
			layout : 'column',
			hideLabel : true,
			items : [{
				xtype : 'itemselector',
				name : 'itemselector',
				drawUpIcon : false,
				drawDownIcon : false,
				drawLeftIcon : true,
				drawRightIcon : true,
				drawTopIcon : false,
				drawBotIcon : false,
				fieldLabel : '',
				imagePath : '/bsapp/extjs/plugins/ux/images/',
				multiselects : [{
					width : 250,
					height : 200,
					id : 'fromSelect',
					store : getStore('', false),
					legend : '待选指标',
					displayField : 'title',
					valueField : 'name'
				}, {
					width : 250,
					height : 200,
					id : 'toSelect',
					store : getStore('', false),
					legend : '已选指标',
					displayField : 'title',
					valueField : 'name'
				}]
			}]
		});

Ext.onReady(function() {
	/**
	 * 开启EXT提示功能
	 * 
	 * @return {TypeName}
	 */
	Ext.QuickTips.init();

	combo.store = getStore("", false);
	Ext.form.Field.prototype.msgTarget = 'side';
	// combo.getStore().load();
	win = new Ext.Window({
				frame : true,
				width : 558,
				title : '选择指标',
				closeAction : 'hide',
				modal : true,// 遮罩
				resizable : false,// 不可改变大小
				items : [isForm],
				buttons : [{
					text : '确定',
					handler : function() {
						// 保存当前切换类型下的所有指标的name和title值
						ay_all_target
								.push(isForm.getForm()
										.findField('itemselector').fromMultiselect.store.data.items);
						var _KPIMapValue = "";// 添加到Grid的KPIMapValue
						var _KPIValue = "";// 添加到Grid的KPIValue
						for (var j = 0; j < isForm.getForm()
								.findField('itemselector').toMultiselect.store
								.getCount(); j++) {
							_KPIMapValue += isForm.getForm()
									.findField('itemselector').toMultiselect.store
									.getAt(j).get('name');

							_KPIValue += isForm.getForm()
									.findField('itemselector').toMultiselect.store
									.getAt(j).get('title');

							if (j < isForm.getForm().findField('itemselector').toMultiselect.store
									.getCount()
									- 1) {
								_KPIMapValue += ",";
								_KPIValue += ",";
							}
						}
						operateGridPanel.getStore().getAt(_recordIndex).set(
								'KPIMap', _KPIMapValue);
						operateGridPanel.getStore().getAt(_recordIndex).set(
								'KPI', _KPIValue);

						win.hide();
						// if(_KPIValue != ""){
						// var recordArray = [];
						// recordArray.push(_recordIndex);
						// alert(_recordIndex);
						// //当前行所有列都有合法的值之后,把行设为选中状态
						// operateGridPanel.getSelectionModel().selectRows(recordArray);
						// }
					}
				}, {
					text : '取消',
					handler : function() {
						this.ownerCt.ownerCt.hide();
					}
				}]
			});

	/**
	 * Ext.grid.GridPanel
	 */
	operateGridPanel = new Ext.grid.EditorGridPanel({
				applyTo : 'analyseKPIGrid',
				height : 200,
				width : 1000,
				store : operateStore,
				cm : operateColumn,
				sm : checkModel,
				enableHdMenu : false,// True表示为在头部出现下拉按钮,以激活头部菜单。
				columnLines : true, // True表示为在列分隔处显示分隔符
				trackMouseOver : true, // 当鼠标移过行时,行是否要highlight
				stripeRows : true
			});

	/**
	 * window show之前触发的函数
	 * 
	 * @param {Object}
	 *            obj
	 */
	win.on('beforeshow', function(obj) {
		if ((ay_cbox.getValue() != null) || (ay_cbox.getValue() != "")) {
			if (ay_cbox.getValue() == 'landir') {
				var _left = ay_lander_cboxL.getValue();
				var _right = ay_lander_cboxR.getValue();
				// 获得ChangeTypeId
				isForm.getForm().findField('itemselector').fromMultiselect.store.baseParams = {
					xpath : _xpath + '/' + ay_cbox_value + '/' + _left + '-'
							+ _right + '/' + _recordChangeTypeId
				};

			} else {
				isForm.getForm().findField('itemselector').fromMultiselect.store.baseParams = {
					xpath : _xpath + '/' + ay_cbox_value + '/'
							+ _recordChangeTypeId
				};
			}
		}

		isForm.getForm().findField('itemselector').fromMultiselect.store.load();
		// 每次SHOW时REMOVE 右边的选择框
		isForm.getForm().findField('itemselector').toMultiselect.store
				.removeAll();
	});

	/**
	 * grid 单元格点击事件
	 * 
	 * @param {Object}
	 *            grid
	 * @param {Object}
	 *            rowIndex
	 * @param {Object}
	 *            columnIndex
	 * @param {Object}
	 *            e
	 */
	operateGridPanel.on('cellclick', function(grid, rowIndex, columnIndex, e) {
		_recordIndex = rowIndex;
		if (columnIndex == 4) {
			// 指标

			_recordChangeTypeId = grid.getStore().getAt(_recordIndex)
					.get(	'changeTypeId');// 获得当前行的ChangeTypeId
			if (_recordChangeTypeId != null) {
				win.show();
			} else {
				Ext.MessageBox.show({
							title : "友情提示",
							msg : "请选择切换类型",
							buttons : Ext.Msg.OK,
							width : 260,
							icon : Ext.MessageBox.INFO,
							fn : function() {
								// 回调函数
								grid.startEditing(rowIndex, 1);
							}
						});
			}
		} else if (columnIndex == 5) {
			// 删除
			grid.getStore().removeAt(rowIndex);
		}
	});

	/**
	 * grid 编辑后触发验证数据的事件
	 * 
	 * @param {Object}
	 *            e
	 */
	operateGridPanel.on('validateedit', function(e) {

		if (e.field == 'changeTypeId') {
			// 如果编辑的是COMBOBOX
			var _editFlag = false;
			for (var i = 0; i < e.grid.getStore().getCount(); i++) {
				if (e.grid.getStore().getAt(i).get('changeTypeId') == e.value) {
					e.cancel = true;
					_editFlag = true;
					Ext.MessageBox.show({
						title : "友情提示",
						msg : "不能添加相同的切换类型",
						buttons : Ext.Msg.OK,
						width : 260,
						icon : Ext.MessageBox.WARNING
					});
					break;
				}
			}
			//设置隐藏列的值,在验证grid的时候,把切换类型里的combox的显示值赋给隐藏列changeTitle 
			var comboxTitle = combo.getStore().getAt(combo.getStore().find(
					combo.valueField, e.value));
			// e.grid.getStore().getAt(_recordIndex).set("changeTitle", comboxTitle.get(combo.displayField)); 
			e.grid.getStore().getAt(_recordIndex).set("changeTitle",
					combo.getRawValue());
		}
	});
});
1
10
分享到:
评论

相关推荐

    Ext组合框comboBox带分页

    用EXT来实现下拉框ComboBox 下拉框可以实现分页

    Ext4.0 动态修改ComboBox选择项(本地模式)

    首先,ComboBox在Ext JS中是一个可选列表的输入控件,它可以展示一个下拉菜单供用户选择。在本地模式下,ComboBox的数据通常存储在本地,如JavaScript数组中,而不是从远程服务器获取。这样可以提高应用的响应速度,...

    EXT2_combobox_form.rar_combobox ext_ext

    EXT2_combobox_form.rar_combobox ext_ext 这个标题暗示我们关注的是一个与EXT2相关的项目,其中包含了关于form表单和combobox的示例。EXT是一个流行的JavaScript库,主要用于构建富客户端应用,特别是Web应用的用户...

    ext combobox二级联动

    ext,ext combobox,ext二级联动,ext combobox二级联动 ___本人的原则:上传好东西,但绝不便宜.因为自己的心血 ext combobox二级联动,ext ,ext combobox,combobox,combobox二级联动,ext 二级联动 groupCombo.on('...

    用Ext 2.0 combobox 做的省份和城市联动选择框的例程

    在本文中,我们将深入探讨如何使用Ext 2.0的ComboBox组件实现省份和城市联动选择框的功能。Ext是一个强大的JavaScript库,它提供了丰富的用户界面组件,包括ComboBox,用于创建下拉选择框。在这个例程中,我们将看到...

    Ext带图标Combobox

    总结来说,Ext IconCombobox是Ext JS中的一个实用组件,它结合了Combobox的便利性和图标的可视化效果。通过自定义模板和数据源,我们可以轻松创建出具有图标展示的下拉列表,提高用户界面的易用性与美观度。在实际...

    Ext combobox 下拉多选框带搜索功能

    总的来说,这个定制的Ext ComboBox组件结合了多选和搜索功能,提高了用户在大量选项中的交互效率。理解并实现这样的功能对于开发复杂的Web应用程序是非常有价值的,尤其是在需要用户快速准确选择多项的场景下。通过...

    Ext 组合框 ComboBox 参数详解

    该资源是war包,里面包括ComboBox中的各个参数, 详细讲解在我的文档中有

    Ext ComboboxGrid

    在Ext JS中,ComboBox通常用于显示一个可选的下拉列表,而Grid则用于展示大量数据并进行编辑和操作。ComboboxGrid将这两者融合,使得用户可以在输入框中输入关键字搜索,同时下拉展示匹配的网格数据,便于多维度筛选...

    Ext comboBox的remote模式,联想功能实现

    在Ext JS的comboBox中,远程模式(remote mode)是一种数据加载策略,它适用于处理大量数据或实时数据的情况。在这种模式下,comboBox不会一次性加载所有选项,而是根据用户输入的关键词动态地向服务器发送请求,...

    Ext->editgrid+combobox

    Ext中的Combobox下来框在EditGrid中的应用。Combobox显示值问题得以解决。

    用Ext 2_0 combobox 做的省份和城市联动选择框 DOJO中国

    在本案例中,“用Ext 2_0 combobox 做的省份和城市联动选择框”是一种交互式UI设计,常用于地理信息的选择,例如用户先选择省份,然后根据所选省份动态加载对应的城市选项。 Ext 2.0的Combobox组件主要包含以下几个...

    extjs的ComboBox 2级联动

    ComboBox由几个关键部分组成,包括store(数据存储)、displayField(显示字段)和valueField(值字段)。Store用于存储选项数据,displayField定义了在下拉列表中显示的字段,而valueField则标识选中项的唯一标识。...

    Ext2.0本地模式动态修改combobox选择项

    标题中的“Ext2.0本地模式动态修改combobox选择项”指的是使用Ext JS 2.0框架中的Combobox组件在本地数据模式下实现动态更新选择项的功能。Ext JS是一个流行的JavaScript库,主要用于构建富客户端Web应用程序。...

    combobox Ext之扩展组件多选下拉框

    在ExtJS中,ComboBox是一个基本的输入组件,它结合了文本输入框和下拉列表的功能。默认情况下,ComboBox只允许用户选择一个选项。但是,通过扩展和定制,我们可以将其转变为支持多选的下拉框。这种组件在需要用户从...

    Ext.form.field.ComboBox结合Java、JSON实现AutoComplete

    本示例探讨如何利用Ext JS中的`Ext.form.field.ComboBox`组件,结合Java后端和JSON数据格式,来创建这样一个功能。 `Ext.form.field.ComboBox`是Ext JS框架中一个强大的组件,它提供了下拉列表的功能,可以用于创建...

    Ext ComBobox 附带完整附件

    在给定的压缩包文件中,我们看到包含了一个名为"DmaComboBox.js"的文件,这很可能就是Ext ComBobox的源代码实现。 首先,我们要理解Ext JS是一个用于构建富客户端Web应用的开源JavaScript框架。它提供了大量的UI...

Global site tag (gtag.js) - Google Analytics