extjs itemselector 使用详解,前台显示及后台数据交互

这两天折腾这个itemselector,真是折腾的够呛,好多不好弄的地方,网上好多,但是没有讲的详细的,对于初学者不好弄,下面我详细解释下,先看效果图吧:
 效果就是这么个效果,下面看代码吧,边看边讲吧。
首先我们要引入js文件和css文件,因为它是相当于一个ext的插件,所以还需要引入js和样式文件,需要引入:
MultiSelect.js   ItemSelector.js   主要是这两个js文件,css文件我觉得不用引入也行。引入文件不用我说了吧,呵呵...主要是这两个文件。
然后我写的是两个方法,要不咱们先看个简单的吧,最简单:
Ext.onReady(function(){

    Ext.QuickTips.init();
    Ext.form.Field.prototype.msgTarget = 'side';
//数据
    var ds = 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'
        }
    });

    /*
     * Ext.ux.form.ItemSelector Example Code
     */
    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: 250,
                height: 200,
                store: ds,
                displayField: 'text',
                valueField: 'value'
            },{
                width: 250,
                height: 200,
                store: [['10','Ten']],
                tbar:[{
                    text: 'clear',
                    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的值,取值应该是使用request,名字是itemselector
                }
            }
        }]
    });

});

这个是最简单的,静态的一个选择框,做成动态的,下面:
写成了方法
UsersManager.setPosition=function(){
var setWin = new Ext.Window({
title:'选择职位',
width:558,
height:400,
modal: true,// 遮罩  
items:[
UsersManager.isForm()
],
buttonAlign:'center',
       buttons: [{
           text: '确定',
           handler: function(){
                var form = setWin.get(0).getForm();
               if(form.isValid()){
EU.Quest('确定要保存么?', function(status) {
if (status == 'yes') {
form.submit({
url : ROOT+'/system/UserAndPosiAction/doAdd.json?'+setWin.get(0).getForm().getValues(true),
method : 'POST',
params :{userId:grid.selModel.selections.keys},
success : function(form, action) {
setWin.close();
EU.Info('保存成功!');
},
failure : function(form, action) {
EU.Info('操作失败!');
},
clientValidation : false
});
}
});
               }
           }
        },{
text : '取消',
handler : function() {
setWin.close();
}
       }]
});
setWin.show();
};

//这里是动态获得数据的,通过ajax从后台获得数据
selectorItems.getFromStore = function (key,form){
Ext.Ajax.request({
url : EU.root + "/system/UserAndPosiAction/doGetAllPosi.json",
method : 'post',
async : false,
params: {userId:key},
success : function(result, request) {
var results = Ext.util.JSON.decode(result.responseText);//获得数据是json格式的
var leftData = results.leftData;
var _tmpLdata = [];
//使用下面这种方法转换成arry格式的
Ext.each(leftData,function(item){
var __tmpldata = [];
__tmpldata.push(item.posiId);
__tmpldata.push(item.posiName);
_tmpLdata.push(__tmpldata);
});
var dsform = new Ext.data.ArrayStore({
       data: _tmpLdata,
       fields: ['value','text'],
       sortInfo: {
           field: 'value',
           direction: 'ASC'
       }
   });
//这里是加载 你已经选择的数据
var rgithtData = results.rightData;
var _tmpRdata = [];
Ext.each(rgithtData,function(item){
var __tmprdata = [];
__tmprdata.push(item.posiId);
__tmprdata.push(item.posiName);
_tmpRdata.push(__tmprdata);
});
_tmpRdata.length==0?_tmpRdata = [['1000','普通员工']]:_tmpRdata;
form.add(selectorItems.selectItems(dsform,_tmpRdata,form));
form.doLayout();
},
failure : function(result, request) {
Ext.MessageBox.alert('系统异常', '请求数据失败!');
}
});
};
selectorItems.selectItems=function(lFromData,rFromData,form){
return {
           xtype: 'itemselector',
           name: 'itemselector',
           fieldLabel: 'ItemSelector',
           drawUpIcon : false,  
                drawDownIcon : false,  
                drawLeftIcon : true,  
                drawRightIcon : true,  
                drawTopIcon : false,  
                drawBotIcon : false,
       imagePath: EU.root+'/ext/images/selectetor',
           multiselects: [{
               width: 250,
               height: 300,
               legend : '所有职位', 
               store: lFromData,
               displayField: 'text',//这里的名字必须是text,因为是源码写死的,如果你想改可以修改源码
               valueField: 'value'//这里的value也是写死的
           },{
               width: 250,
               height: 300,
               store: rFromData,/ /但是要注意,这里最好是有默认相的时候这样写,如果右面有可能是空的就不要这样写了,是空的时候要给他一个默认的数组,这样获得值的时候取的才是value,要不他取得值可能是text
               allowBlank:false,
               legend : '所选职位', 
               tbar:[{
                   text: 'clear',
                   handler:function(){
                   form.getForm().findField('itemselector').reset();
               }
               }]
           }]
       };
};

里面可能有些自己封装的js,如果有看不懂的请给我留言,直接复制过去估计是不能用的,大概是这么个意思了,欢迎大家提问。
这里写成方法每次都可以加载上,如果直接写可能第二次打开的时候会没有出现。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值