`

(转)Extjs 中的ItemSelector

    博客分类:
  • EXT
阅读更多
一 Extjs中的插件ItemSelector,使用中的注意事项
   使用中需要引用3个文件,MultiSelect.js ,ItemSelector.js,MultiSelect.css
二、参考官方示例程序,中文表现为乱码,需要将以上文件,另存为utf-8格式
三、官方示例程序程序中,如果不做修改,只能获取displayText
四、如果采用json从后台获取,不能自定义displayField和valueField属性,否则在接受框没有选择的值出现.
  因笔者通过SQL语句以value text方式,发现数据库不允许这样操作,提示为系统保留字符存在,例如以下语句:
  select sId as value,Stext as text from xxx
为此,对该插件,笔者修改一下几个地方,可以完善:
1:修改MultiSelect.js插件,将使用value 和text位置,变更为_value  _text,主要是以下位置
if(Ext.isArray(this.store)){
            if (Ext.isArray(this.store[0])){
                this.store = new Ext.data.ArrayStore({
                    fields: ['_value','_text'],
                    data: this.store
                });
                this.valueField = '_value';
            }else{
                this.store = new Ext.data.ArrayStore({
                    fields: ['_text'],
                    data: this.store,
                    expandData: true
                });
                this.valueField = '_text';
            }
            this.displayField = '_text';
        } else {
            this.store = Ext.StoreMgr.lookup(this.store);
        }


//后台返回的字段为_value 和_text,例如:
//select sID as _value,Stext as _text from XXX等语句
//采用json获取数据代码可参考一下方式:
var DSformstore=new Ext.data.Store({
baseParams:{classid:classid},  //带有参数
autoLoad:true,
autoDestroy:true,
proxy:new Ext.data.HttpProxy({
method:'GET',
url:'GetPowerList.asp?Action=GetGParray&'
}),
reader:new Ext.data.JsonReader({
},['_value','_text'])
});


//接受框store ,定义如下:
var storeTo = new Ext.data.ArrayStore({
fields: ['_value', '_text']
   });

2: 为获取选择框的value值,需要修改ItemSelector的setValue()函数,笔者代码参考以下网址:
http://abgne.tw/ext-js/ext-js-tips/itemselector-setvalue-item.html
Ext.override(Ext.ux.form.ItemSelector, {
setValue: function(values) {
var index;
var selectionsArray = [];
this.toMultiselect.view.clearSelections();
this.hiddenField.dom.value = '';
 
if (!values || (values == '')) { return; }
 
if (!Ext.isArray(values)) { values = values.split(this.delimiter); }
for (var i=0; i<values.length; i++) {
index = this.fromMultiselect.view.store.indexOf(this.fromMultiselect.view.store.query(this.fromMultiselect.valueField, new RegExp('^' + values[i].trim() + '$', "i")).itemAt(0));
if (index > -1) {
selectionsArray.push(index);
}
}
 
var records = [], record;
if (selectionsArray.length > 0) {
for (var i=0; i<selectionsArray.length; i++) {
var record = this.fromMultiselect.view.store.getAt(selectionsArray[i]);
records.push(record);
}
if(!this.allowDup)selectionsArray = [];
for (var i=0; i<records.length; i++) {
record = records[i];
if(this.allowDup){
var x=new Ext.data.Record();
record.id=x.id;
delete x;
this.toMultiselect.view.store.add(record);
}else{
this.fromMultiselect.view.store.remove(record);
this.toMultiselect.view.store.add(record);
selectionsArray.push((this.toMultiselect.view.store.getCount() - 1));
}
}
}
this.toMultiselect.view.refresh();
this.fromMultiselect.view.refresh();
var si = this.toMultiselect.store.sortInfo;
if(si){
this.toMultiselect.store.sort(si.field, si.direction);
}
this.toMultiselect.view.select(selectionsArray);
}
});

3:具体使用方法举例如下:(这里直接是应用官方示例程序,没有使用json从后台获取数据,同时也没有修订value 及text为_value _text
 var dsform = new Ext.data.ArrayStore({
        data: [[123,'One Hundred Twenty Three'],
            ['1', 'One'], ['2', 'Two'], ['3', 'Three'], ['4', 'Four'], ['5', 'Five'],
            ['6', 'Six'], ['7', 'Seven'], ['8', 'Eight'], ['9', 'Nine']],
        fields: ['value','text'],
        sortInfo: {
            field: 'value',
            direction: 'ASC'
        }
    });




var dsto = new Ext.data.ArrayStore({
fields: ['value', 'text']
   });
    
    var isForm = new Ext.form.FormPanel({
        title: 'ItemSelector Test',
        width:700,
        bodyStyle: 'padding:10px;',
        renderTo: 'itemselector',
        items:[{
            xtype: 'itemselector',
            name: 'itemselector',
            fieldLabel: 'ItemSelector',
       imagePath: '../ux/images/',
            multiselects: [{
                width: 180,
                height: 200,
                store: dsform ,
                displayField: 'text',
                valueField: 'value'
            },{
                width: 150,
                height: 200,
                store: dsto,
displayField: 'text',
                valueField: 'value',
                tbar:[{
                    text: '清除选择项目',
                    handler:function(){
                   isForm.getForm().findField('itemselector').reset();
               }
                }]
            }]
        }],


        buttons: [{
            text: 'Save',
            handler: function(){
                if(isForm.getForm().isValid()){
                    Ext.Msg.alert('Submitted Values', 'The following will be sent to the server: <br />'+
                        isForm.getForm().getValues(true));
                }
            }
        }]
    });

运行结果如下
可以获取value值,而非displayText
分享到:
评论

相关推荐

    extjs4.2的itemselector

    ExtJS 4.2 的 `itemselector` 是一个强大的组件,用于在两个独立的数据源之间进行选择项的双向同步。这个组件通常用于实现用户界面中的双列表选择功能,例如在创建一对多或一对一关系时,让用户能从两边的列表中分别...

    extJS3.1源码及demo

    在"extJS3.1源码及demo"这个资源中,你将找到ExtJS 3.1.0的完整源代码和相关的示例。源码的分析对于深入理解框架的工作原理至关重要,特别是对于那些想要进行定制化开发或者优化性能的开发者来说。源码包含了各种...

    Extjs treeselector 树结构选择器

    3. **ItemSelector(项目选择器)**:ItemSelector是ExtJS中的一个组件,用于在两个列表之间移动项目。TreeSelector则是对这个组件进行了扩展,使其能处理树形数据。 4. **Data Binding(数据绑定)**:...

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

    在ExtJS 4.x框架中,ComboboxTree是一种特殊的组件,它将传统的下拉框与树形结构结合在一起,提供了一种更为灵活的用户输入方式。这种组件在数据选择上非常实用,尤其当数据层级关系复杂时,可以方便地进行多选或...

    模仿Ext4实现ItemSelector

    模仿Ext4实现ItemSelector,在Rally App开发中虽然是Ext4,但ux包下面的对象被阉割了 所以手动实现了一个,布局和组件化方面还有待改进。

    用extjs 4.0打造自己的WEB桌面

    在本教程中,我们将基于 ExtJS 4.0 版本,创建一个自己的动态 WEB 桌面,可以像 webQQ 那样添加应用,打开应用。 桌面图标自动换行 在桌面上,图标的排列方式非常重要。我们可以使用 ExtJS 4.0 的 layout manager ...

    解决extjs 桌面图标换行方法

    本文档将详细介绍如何在ExtJS框架中实现桌面图标的自动换行功能。在许多应用中,特别是在模仿桌面环境的应用程序中,桌面图标(通常称为快捷方式)的布局至关重要。当屏幕空间不足以容纳所有的图标时,自动换行功能...

    Extjs MultiselectItemSelector

    在实际应用中,开发人员需要将`MultiselectItemSelector` 集成到他们的ExtJs应用程序中,这通常涉及到以下步骤: 1. 引入所需的CSS和JavaScript文件。 2. 在ExtJs的配置对象中定义MultiselectItemSelector组件,设置...

    Extjs事件和模板

    在EXTJS这个强大的JavaScript框架中,事件处理和模板机制是两个至关重要的概念,它们极大地提升了开发者构建用户界面的效率和代码的可维护性。本文将深入探讨EXTJS中的事件系统和模板机制,以及如何在实际开发中应用...

    extjs+struts2的一个套路模式

    在IT领域,特别是Web开发中,Struts2与ExtJS的结合是一种常见且高效的技术搭配。Struts2作为后端框架,负责业务逻辑处理及数据交互;而ExtJS作为前端框架,专注于用户界面的构建与优化。两者结合,能够实现前后端...

    icon combobox

    其中,Icon Combobox是ExtJS中的一个特色组件,将图标与下拉列表结合,提升了用户界面的美观度和交互性。本文将深入探讨Icon Combobox的实现原理、功能特性以及如何自定义修改图片大小。 **Icon Combobox的定义** ...

    EXT2.0分页

    itemSelector: 'div' }); var panel = new Ext.Panel({ title: 'EXT2.0分页示例', items: [view, pagingToolbar] }); panel.render(document.body); // 渲染到页面 ``` 4. 在后端,你需要提供一个能支持...

    ExtNet控件使用心得

    - **ItemSelector**: CSS选择器,用于定位列表中的项目,常用于自定义样式和行为。 - **PageSize**: 定义下拉列表一次显示的条目数量,对性能和用户友好性有直接影响。 综上所述,ExtNet控件提供了丰富的配置选项...

    如何实现带有清单的组合框并选择ext js 4.2中的所有选项

    itemSelector: 'div.x-boundlist-item', getInnerTpl: function() { return '{name}'; } }, listeners: { checkchange: function(field, record, checked) { // 更新选择的值 } } }); ``` 6. **注意...

Global site tag (gtag.js) - Google Analytics