使用ExtJS的一个扩展插件:Ext.ux.Multiselect,也就是列表框组件。对该组件相关处理以及数据绑定、动态设置
总结一下处理的小方法:
一、数据绑定
//创建记录类型person
var person = Ext.data.Record.create([
{ name: 'tValue', mapping: 1 },
{ name: 'tText', mapping: 2 },
]);//创建数据解析器
var reader = new Ext.data.ArrayReader({ id: 0 }, person);//创建HttpProxy代理
var proxy = new Ext.data.HttpProxy({
url: '/Admin/Theme.aspx?Action=ThemeList'
});//创建数据集Store
var store = new Ext.data.Store({
autoLoad: true,
proxy: proxy,
reader: reader
});
.......................//若干代码
//创建Ext.ux.Multiselect组件
new Ext.ux.Multiselect({
id: "theme", name: 'theme',
dataFields: ["tValue", "tText"],
store: store, //或者使用如下数据:
//data: [["1", "根"], ["2", "Image"], ["3", "CSS"], ["4", "JavaScript"], ["5", "resources"]],
valueField: "tValue",
displayField: "tText",
width: 200,
height: 100,
legend: "主题列表"
}),.......................//若干代码
二、动态设置数据项
var themeStore = Ext.getCmp('theme').store;
if (themeStore != null) {
var record = new Object();
record.tValue = "2";
record.tText = "3";
themeStore.add(new Ext.data.Record(record));
其实这里的操作,仅仅是操作Ext.data.Store对象,如删除项的操作,可以查询API文档。另外,对于如下行:
var themeStore = Ext.getCmp('theme').store;
不可以在渲染(render)事件中直接获取,因为在render事件中像:Ext.getCmp('theme'),是获取不到对象的(延时原因)。
解决的办法可以使用Ext.util.TaskRunner对象。其它的问题正在研究中...
三、数据项的获取
方法一:
Ext.getCmp('theme').getValue();
方法二:
fPanel.getForm().getValues(false)['theme'];
注:fPanel为Multiselect所属的FormPanel对象,且此方法获取值时,必须给Multiselect定义name属性(此处为 'theme')。
方法三:
listeners: {
"click": function(mult, e) {
var value = e.target.innerText;
if (value == null || value == "") {
Ext.getCmp('theme').setValue('');
return;
}
Ext.getCmp('theme').setValue(value); //m.store.getAt(e.target.viewIndex).data
}
} 注:仅限在click事件中,其实这里的e.target.innerText仅是显示的displayField字段,并不是值。而 “m.store.getAt(e.target.viewIndex).data”获取到的是最后单击行的 Record 对象,当然它包含valueField和displayField两个字段。对于如何仅获取displayField,请看下面第五点。
四、设置数据项只能单选
其实本人最初使用Multiselect的目的是想设置ComboBox更高一些,这样能浏览更多的数据元素。但是,至少到目前还没有发现 Multiselect对象有这样的一个属性来设置只能单选(源码中也没有发现),于是乎想到这样一个笨方法:获取最后一次单击的数据项,并设置 ComboBox的值为最后一次单击数据项的值,如下:
new Ext.ux.Multiselect({
id: "theme",
name: "theme",
dataFields: ["tValue", "tText"],
store: themeStore,
valueField: "tValue",
displayField: "tText",
width: 200,
height: 100,
legend: "主题列表",
listeners: {
"click": function(mult, e) {
var value = e.target.innerText;
if (value == null || value == "") {
Ext.getCmp('theme').setValue('');
return;
}
Ext.getCmp('theme').setValue(value);
}
}
})
注:参数e是click事件中传递的参数,而e.target.innerText就是当前单击数据项的值,该方法本人仅在IE中测试过,其它浏览器没有测试,为了解决兼容性问题,可以使用如下方法获取:
"click": function(mult, e) {
var values = fPanel.getForm().getValues(false)['theme'];
if (values == null || values == "") {
Ext.getCmp('theme').setValue('');
return;
}
var items = fPanel.getForm().getValues(false)['theme'].split(',');
var item = items[items.length - 1];
Ext.getCmp('theme').setValue(item);
} 注:fPanel为Multiselect所属为FormPanel对象,这个方法其实就是先解析Multiselect组件最后一次单击数据项的值,然后重新设置Multiselect的值为最后一次单击数据项的值即可。显然,比上一个方法更麻烦一点。
另外,其实上一个方法中,参数e有哪些属性和方法,我是测试得来的,网上有类似的获取方法,如下:
function printf(obj) {
var props = "";
for(var p in obj){
if(typeof(obj[p])=="function"){
//obj[p](); //获取到一个函数成员,如果非必须,注释这句,有些时候会因为这句js无法运行。
}else{
props+= p + "=" + obj[p] + "\t";
}
}
alert(props);
} 这样,可以通过打印参数e中的成员,来测试它有哪些属性、方法等。
五、Multiselect扩展以实现获取displayField字段
Multiselect.js文件,找到如下行(3.0版本):
getValue: function(valueField){
........
},
在之后添加如下:
getText: function(valueField) {
var returnArray = [];
var selectionsArray = this.view.getSelectedIndexes();
if (selectionsArray.length == 0) { return ''; }
for (var i = 0; i < selectionsArray.length; i++) {
returnArray.push(this.store.getAt(selectionsArray).get(this.displayField));
}
return returnArray.join(this.delimiter);
},即可通过Ext.fly('theme').getText()获取到当前所有被选择项的displayField字段。
分享到:
相关推荐
在EXTJS框架中,`Ext.ux.form.LovCombo`是一种自定义组件,它扩展了基本的`Ext.form.field.ComboBox`,提供了更丰富的功能,尤其是针对多选和联动选择的需求。这个组件通常用于创建具有“lov”(即“Look Up Value”...
### ExtJs选中 `var editor = new Ext.ux.grid.RowEditor` 详解 在Web开发领域,特别是使用ExtJs框架进行复杂用户界面构建时,`RowEditor` 是一个非常实用的功能,它允许用户直接在表格行内编辑数据,极大地提高了...
首先,Ext.ux.UploadDialog是一个基于ExtJS框架的组件,它允许用户在一个对话框中选择并上传多个文件。这个组件通常包含一个文件选择输入框、上传按钮、进度条和取消上传的功能。它的主要优势在于能够提供友好的用户...
总的来说,`Ext.ux.SwfUploadPanel.js`是一个强大而灵活的文件上传解决方案,它结合了ExtJS的组件化和SwfUpload的高级上传功能,使得在Web应用中实现多文件上传变得简单易行。然而,随着HTML5技术的发展,现代浏览器...
这个"Ext.ux.UploadDialog.zip"压缩包包含了EXTjs的UploadDialog组件,方便开发者在自己的项目中直接使用。 UploadDialog组件的核心功能是提供一个用户友好的界面,让用户能够选择并上传文件到服务器。这个组件通常...
Extjs4.1多个扩展 1、Ext.ux.aceeditor.Panel 2、Ext.ux.grid.feature.Tileview 3、Ext.ux.upload.Button 4、Ext.ux.toggleslide.ToggleSlide 5、Ext.ux.container.ButtonSegment 6、Ext.ux.grid.plugin.RowEditing ...
在ExtJS框架中,`Ext.ux.tree.TreeGrid`组件是一种结合了树形结构与表格显示特性的控件,适用于展示具有层级关系的数据。通过这种组件,用户可以在一个界面上同时查看数据的层次结构以及具体数据内容。 #### 二、...
Ext.ux.UploadDialog批量上传文件实例是一个基于ExtJS组件库扩展插件的文件上传解决方案,主要针对需要一次性处理多个文件上传的应用场景。ExtJS是一个强大的JavaScript框架,它提供了丰富的用户界面组件,而Ext.ux....
Most configuration options are inherited from Ext.Window (see ExtJs docs). The added ones are: url - the url where to post uploaded files. base_params - additional post params (default to {}). ...
【Ext 3.x + Ext 2.x 下拉树 Ext.ux.ComboBoxTree】是基于ExtJS框架的一个组件,它结合了下拉框(ComboBox)和树形控件(TreePanel)的功能,提供了一种用户友好的选择界面。在网页应用中,这种控件常用于展示层级...
ComboboxTree是ExtJS中的一个自定义组件,它扩展了标准的ComboBox组件,增加了树状结构的功能。用户可以在下拉列表中看到一个树形结构,逐级展开节点,选择需要的项。这种组件特别适合于那些需要展示层级关系且允许...
Ext.ux.UploadDialog 是一个 ExtJS 框架的扩展组件,它提供了一个友好的用户界面来处理文件上传。在服务器端,我们需要正确解析接收到的请求,以便能够读取并处理上传的文件。在 Java 环境下,Apache Commons ...
ExtJs 3.x 分页树(Ext.ux.tree.PagingTreeLoader)是一个强大的扩展,它在处理大量数据时尤其有用,因为树形结构通常需要显示大量的层级和节点。这个组件引入了分页功能,允许用户逐步加载树节点,而不是一次性加载...
总的来说,Ext.ux.GoogleChart插件是ExtJS开发者实现数据可视化的一个强大工具,它结合了Google Charts的灵活性和ExtJS的组件化优势,使得在JavaScript应用中创建高质量的数据图表变得更加容易。
标题 "ext.ux.menu.storemenu.zip" 暗示我们关注的是一个与 ExtJS 框架相关的扩展组件,具体是 `ux.menu.storemenu`。这个扩展可能为 ExtJS 的菜单系统提供了一种新的功能,可能涉及到数据存储和动态加载菜单项。在...
而`Ext.ux.Notification.js`则是实际的Notification插件源代码,它扩展了Ext JS框架,添加了显示通知的功能。 在使用Notification插件之前,需要确保已经正确地引入了所有依赖文件。然后,可以通过以下步骤在应用中...
这个特定的压缩包"ExtJS-4.2.6扩展ux插件89个"包含了Ext JS 4.2.6版本的一个重要组件:ux(用户界面扩展)插件。这些插件提供了额外的功能和组件,增强了框架的原生能力,帮助开发者构建更复杂、功能更丰富的应用...
- 开发插件通常涉及创建一个新的JavaScript文件,定义一个类并扩展自`Ext.util.Plugin`或`Ext.grid.Panel`等特定组件的Plugin接口。 - 插件的核心方法是`init`,在这个方法中,你可以向关联的组件添加事件监听器、...
EXTJS Touch 提供了一套完整的UI组件,包括表格、按钮、滑块、选择器等,而Ext.ux.touch.grid-master则是EXTJS Touch中的一个增强型表格组件。这个扩展提供了更丰富的功能,使得在移动设备上处理和展示大量结构化...
"Ext.ux.FileSelector"是一个基于ExtJS框架的扩展组件,用于在Web应用程序中提供文件选择功能。ExtJS是一个强大的JavaScript库,专为构建富客户端应用程序而设计,它提供了丰富的用户界面组件和数据绑定机制。"ux"是...