Ext之Combobox的远程加载数据实例(附前后台代码)

我看了很多文章关于这方面的文章,但都是只有前端没有后台的,导致在后台返回的数据格式一直不正确,在自己多次摸索后终于成功做出来了,现在就和大家分享一下。

实现效果:

废话不多说,直接上代码!

Ext代码:

var buyTypeStore = new Ext.data.Store({
        fields: ["text", "value"],
        proxy: {
            type: "ajax",
            url: doLoadItemCatUrl,
            actionMethods: {
                read: "POST"  //解决传中文参数乱码问题,默认为“GET”提交
            },
            reader: {
                type: "json",  //返回数据类型为json格式
                root: "root"  //数据
            }
        },
        autoLoad: true  //自动加载数据
    });

    var form = new Ext.form.Panel({
        // width: 400,
        // height: 300,
        border : false,
        //   margin: "100 0 0 200",  //边距
        bodyPadding: 10,
        //    renderTo: Ext.getBody(),  //显示到页面上
        items: [{
            xtype: "combo",
            id: "buyType",
            hiddenName: "buyType",  //hiddenName和id不要相同,在IE6中会显示错位。
            store: buyTypeStore,
            displayField: "text",
            valueField: "value",
            triggerAction: "all",
            //  mode : "remote",
            queryMode: "local",  //低版本使用mode属性
            editable: true,
            allowBlank: false,
            value: "请填写类目",
            fieldLabel: "选择类目<label style='color: red;'>*</label>",
            typeAhead: true,//设置为true,当开始输入字符时,在指定的延迟之后会自动匹配剩下的内容,如果找到了匹配的 内容则自动选中它 (typeAheadDelay) (默认值为 false)
            listeners: {
                "select": function () {
                    //获得显示的值和实际的提交值
                    var name = Ext.getCmp("buyType").getRawValue();
                    var pid  = Ext.getCmp("buyType").getValue();
                    $("#cid").show();
                    $("#cid").html(name);
                 //   Ext.Msg.alert("提示", "显示的值:" + name + "\r\n实际的提交值:" + value);
                }
            }
        }]
    });


    //装表单的窗口
    extWin = new Ext.window.Window({
        title: "选择类目",
        closeAction: "hide",
        //   modal: true,  //遮罩 :就是让form表单以外不能编辑
        constrain: true,  //限制拖动范围
        resizable: true,  //可调整大小的; 可变尺寸的
        bodyPadding: 10,
        border: false,
        buttonAlign: "center",   //按钮显示位置
        layout: "fit",
        items: [form],  //装表单进来
        listeners: {
            "close": function () {
                //点击右上角的关闭按钮,就清空form
                form.getForm().reset();
            }
        }
    });

});

后台返回的数据格式如下:
{root=[{text=平板电脑配件, value=0}, {text=台式机, value=1}, {text=服务器/工作站, value=2}]}

后台核心代码:

public Map<String,Object> queryCats(){
    List<ItemCat> catList = queryItemCat();
    List list = new ArrayList();
    //:[["平板电脑配件"],["台式机"],["服务器/工作站"],["笔记本配件"],["电脑配件"]]
    //{'root': [{'text':'合约机', value:'1'},{'text':'裸机', value:'0'}]}
    for(int i=0; i < catList.size(); i++){
        Map<String,Object> map = new HashMap<>();
        map.put("text",catList.get(i).getName());
        map.put("value",String.valueOf(i));
        list.add(i,map);
    }
    Map<String,Object> map = new HashMap<>();
    map.put("root",list);
    return  map;
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值