`
sammor
  • 浏览: 416060 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ExtJS 扩展组件学习之列表框 Ext.ux.Multiselect

阅读更多

使用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下拉框

    在EXTJS框架中,`Ext.ux.form.LovCombo`是一种自定义组件,它扩展了基本的`Ext.form.field.ComboBox`,提供了更丰富的功能,尤其是针对多选和联动选择的需求。这个组件通常用于创建具有“lov”(即“Look Up Value”...

    ExtJs选中var editor = new Ext.ux.grid.RowEditor详解

    ### ExtJs选中 `var editor = new Ext.ux.grid.RowEditor` 详解 在Web开发领域,特别是使用ExtJs框架进行复杂用户界面构建时,`RowEditor` 是一个非常实用的功能,它允许用户直接在表格行内编辑数据,极大地提高了...

    ext 多文件上传控件 Ext.ux.UploadDialog 使用中的问题

    首先,Ext.ux.UploadDialog是一个基于ExtJS框架的组件,它允许用户在一个对话框中选择并上传多个文件。这个组件通常包含一个文件选择输入框、上传按钮、进度条和取消上传的功能。它的主要优势在于能够提供友好的用户...

    Ext.ux.SwfUploadPanel.js

    总的来说,`Ext.ux.SwfUploadPanel.js`是一个强大而灵活的文件上传解决方案,它结合了ExtJS的组件化和SwfUpload的高级上传功能,使得在Web应用中实现多文件上传变得简单易行。然而,随着HTML5技术的发展,现代浏览器...

    Ext.ux.UploadDialog.zip

    这个"Ext.ux.UploadDialog.zip"压缩包包含了EXTjs的UploadDialog组件,方便开发者在自己的项目中直接使用。 UploadDialog组件的核心功能是提供一个用户友好的界面,让用户能够选择并上传文件到服务器。这个组件通常...

    extjs4.1-ux.rar

    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 ...

    Ext.ux.tree.treegrid异步加载

    在ExtJS框架中,`Ext.ux.tree.TreeGrid`组件是一种结合了树形结构与表格显示特性的控件,适用于展示具有层级关系的数据。通过这种组件,用户可以在一个界面上同时查看数据的层次结构以及具体数据内容。 #### 二、...

    Ext.ux.UploadDialog批量上传文件实例

    Ext.ux.UploadDialog批量上传文件实例是一个基于ExtJS组件库扩展插件的文件上传解决方案,主要针对需要一次性处理多个文件上传的应用场景。ExtJS是一个强大的JavaScript框架,它提供了丰富的用户界面组件,而Ext.ux....

    Ext.ux.UploadDialog

    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

    【Ext 3.x + Ext 2.x 下拉树 Ext.ux.ComboBoxTree】是基于ExtJS框架的一个组件,它结合了下拉框(ComboBox)和树形控件(TreePanel)的功能,提供了一种用户友好的选择界面。在网页应用中,这种控件常用于展示层级...

    Extjs4.X下comboboxTree下拉树型菜单,完美支持多选、单选,绝对好用

    ComboboxTree是ExtJS中的一个自定义组件,它扩展了标准的ComboBox组件,增加了树状结构的功能。用户可以在下拉列表中看到一个树形结构,逐级展开节点,选择需要的项。这种组件特别适合于那些需要展示层级关系且允许...

    如何在服务器端 读取Ext.ux.UploadDialog上传的文件?

    Ext.ux.UploadDialog 是一个 ExtJS 框架的扩展组件,它提供了一个友好的用户界面来处理文件上传。在服务器端,我们需要正确解析接收到的请求,以便能够读取并处理上传的文件。在 Java 环境下,Apache Commons ...

    ExtJs3.* 分页树 Ext.ux.tree.PagingTreeLoader

    ExtJs 3.x 分页树(Ext.ux.tree.PagingTreeLoader)是一个强大的扩展,它在处理大量数据时尤其有用,因为树形结构通常需要显示大量的层级和节点。这个组件引入了分页功能,允许用户逐步加载树节点,而不是一次性加载...

    Ext.ux.GoogleChart extjs插件

    总的来说,Ext.ux.GoogleChart插件是ExtJS开发者实现数据可视化的一个强大工具,它结合了Google Charts的灵活性和ExtJS的组件化优势,使得在JavaScript应用中创建高质量的数据图表变得更加容易。

    ext.ux.menu.storemenu.zip

    标题 "ext.ux.menu.storemenu.zip" 暗示我们关注的是一个与 ExtJS 框架相关的扩展组件,具体是 `ux.menu.storemenu`。这个扩展可能为 ExtJS 的菜单系统提供了一种新的功能,可能涉及到数据存储和动态加载菜单项。在...

    Ext JS Notification 插件

    而`Ext.ux.Notification.js`则是实际的Notification插件源代码,它扩展了Ext JS框架,添加了显示通知的功能。 在使用Notification插件之前,需要确保已经正确地引入了所有依赖文件。然后,可以通过以下步骤在应用中...

    ExtJS-4.2.6扩展ux插件89个

    这个特定的压缩包"ExtJS-4.2.6扩展ux插件89个"包含了Ext JS 4.2.6版本的一个重要组件:ux(用户界面扩展)插件。这些插件提供了额外的功能和组件,增强了框架的原生能力,帮助开发者构建更复杂、功能更丰富的应用...

    ExtJS开发插件及Ext包

    - 开发插件通常涉及创建一个新的JavaScript文件,定义一个类并扩展自`Ext.util.Plugin`或`Ext.grid.Panel`等特定组件的Plugin接口。 - 插件的核心方法是`init`,在这个方法中,你可以向关联的组件添加事件监听器、...

    Ext.ux.touch.grid-master.rar

    EXTJS Touch 提供了一套完整的UI组件,包括表格、按钮、滑块、选择器等,而Ext.ux.touch.grid-master则是EXTJS Touch中的一个增强型表格组件。这个扩展提供了更丰富的功能,使得在移动设备上处理和展示大量结构化...

    Ext.ux.FileSelector

    "Ext.ux.FileSelector"是一个基于ExtJS框架的扩展组件,用于在Web应用程序中提供文件选择功能。ExtJS是一个强大的JavaScript库,专为构建富客户端应用程序而设计,它提供了丰富的用户界面组件和数据绑定机制。"ux"是...

Global site tag (gtag.js) - Google Analytics