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());
}
});
});
分享到:
相关推荐
用EXT来实现下拉框ComboBox 下拉框可以实现分页
首先,ComboBox在Ext JS中是一个可选列表的输入控件,它可以展示一个下拉菜单供用户选择。在本地模式下,ComboBox的数据通常存储在本地,如JavaScript数组中,而不是从远程服务器获取。这样可以提高应用的响应速度,...
EXT2_combobox_form.rar_combobox ext_ext 这个标题暗示我们关注的是一个与EXT2相关的项目,其中包含了关于form表单和combobox的示例。EXT是一个流行的JavaScript库,主要用于构建富客户端应用,特别是Web应用的用户...
ext,ext combobox,ext二级联动,ext combobox二级联动 ___本人的原则:上传好东西,但绝不便宜.因为自己的心血 ext combobox二级联动,ext ,ext combobox,combobox,combobox二级联动,ext 二级联动 groupCombo.on('...
在本文中,我们将深入探讨如何使用Ext 2.0的ComboBox组件实现省份和城市联动选择框的功能。Ext是一个强大的JavaScript库,它提供了丰富的用户界面组件,包括ComboBox,用于创建下拉选择框。在这个例程中,我们将看到...
总结来说,Ext IconCombobox是Ext JS中的一个实用组件,它结合了Combobox的便利性和图标的可视化效果。通过自定义模板和数据源,我们可以轻松创建出具有图标展示的下拉列表,提高用户界面的易用性与美观度。在实际...
总的来说,这个定制的Ext ComboBox组件结合了多选和搜索功能,提高了用户在大量选项中的交互效率。理解并实现这样的功能对于开发复杂的Web应用程序是非常有价值的,尤其是在需要用户快速准确选择多项的场景下。通过...
该资源是war包,里面包括ComboBox中的各个参数, 详细讲解在我的文档中有
在Ext JS中,ComboBox通常用于显示一个可选的下拉列表,而Grid则用于展示大量数据并进行编辑和操作。ComboboxGrid将这两者融合,使得用户可以在输入框中输入关键字搜索,同时下拉展示匹配的网格数据,便于多维度筛选...
在Ext JS的comboBox中,远程模式(remote mode)是一种数据加载策略,它适用于处理大量数据或实时数据的情况。在这种模式下,comboBox不会一次性加载所有选项,而是根据用户输入的关键词动态地向服务器发送请求,...
Ext中的Combobox下来框在EditGrid中的应用。Combobox显示值问题得以解决。
在本案例中,“用Ext 2_0 combobox 做的省份和城市联动选择框”是一种交互式UI设计,常用于地理信息的选择,例如用户先选择省份,然后根据所选省份动态加载对应的城市选项。 Ext 2.0的Combobox组件主要包含以下几个...
ComboBox由几个关键部分组成,包括store(数据存储)、displayField(显示字段)和valueField(值字段)。Store用于存储选项数据,displayField定义了在下拉列表中显示的字段,而valueField则标识选中项的唯一标识。...
标题中的“Ext2.0本地模式动态修改combobox选择项”指的是使用Ext JS 2.0框架中的Combobox组件在本地数据模式下实现动态更新选择项的功能。Ext JS是一个流行的JavaScript库,主要用于构建富客户端Web应用程序。...
在ExtJS中,ComboBox是一个基本的输入组件,它结合了文本输入框和下拉列表的功能。默认情况下,ComboBox只允许用户选择一个选项。但是,通过扩展和定制,我们可以将其转变为支持多选的下拉框。这种组件在需要用户从...
本示例探讨如何利用Ext JS中的`Ext.form.field.ComboBox`组件,结合Java后端和JSON数据格式,来创建这样一个功能。 `Ext.form.field.ComboBox`是Ext JS框架中一个强大的组件,它提供了下拉列表的功能,可以用于创建...
在给定的压缩包文件中,我们看到包含了一个名为"DmaComboBox.js"的文件,这很可能就是Ext ComBobox的源代码实现。 首先,我们要理解Ext JS是一个用于构建富客户端Web应用的开源JavaScript框架。它提供了大量的UI...