当前位置: 代码网 > it编程>前端脚本>ExtJs > Extjs让combobox写起来简洁又漂亮

Extjs让combobox写起来简洁又漂亮

2024年05月15日 ExtJs 我要评论
也已经写了很久时间的extjs ,每次都用到很多的combobox,配置很多东西觉得实在是太麻烦,所以根据常用到的情况写了一个简便的combobox,再次记录下来,以免放在某个地方忘记了找不到了。定义

也已经写了很久时间的extjs ,每次都用到很多的combobox,配置很多东西觉得实在是太麻烦,所以根据常用到的情况写了一个简便的combobox,再次记录下来,以免放在某个地方忘记了找不到了。

定义一个基本的basecombobox类,如下。

ext.define('admin.view.basecmp.basecombobox', {
 extend: 'ext.form.field.combobox',
 xtype: 'basecombobox',
 editable: false,
 labelseparator: ':',
 labelwdith: 0,
 triggeraction: 'all',
 labelalign: 'right',
 //forceselection: true,此属性操作时,就算去掉文字后,失去焦点后还是会选择上一次选择的记录
 autoselect: true,
 selectonfocus: true,
 valuenotfoundtext: '',
 name:'',
 querymode: 'local',
 url:'',
 displayfield: '',
 valuefield: '',
 requires:['admin.view.basecmp.basecomboboxcontroller'],
 controller: 'basecomboboxcontroller',
 emptyindex:-1,//自定义属性,空值所在下标,-1则不添加
 selectindex:0,//自定义属性,自动选择下标
 params:null,//自定义属性,数据参数
 listeners: {
  render: 'getcombodata',
  scope: 'controller'
 },
});

ext.define('admin.view.basecmp.basecomboboxcontroller', {
 extend: 'ext.app.viewcontroller',
 alias: 'controller.basecomboboxcontroller',
 getcombodata: function (combo) {
  ext.ajax.request({
   url: combo.url,
   method :'post',
   params:combo.params,
   success: function (response) {
    var datajson = ext.decode(response.responsetext);
    if(datajson.state != 200 || datajson.data == null || datajson.data.length == 0)
    {
     //服务器返回错误
     return ;
    }
    var data = datajson.data;
    //插入“全部”选项
    if(combo.emptyindex >= 0)
    {
     var emp = {};
     emp[combo.displayfield] = "全部";
     emp[combo.valuefield] = "全部";
     ext.array.insert(data,combo.emptyindex,[emp]);
    }
    var store = ext.create('ext.data.store', {
     fields: ext.object.getkeys(data[0]),
     data: data
    });

    combo.setstore(store);
    //如果指定选中某个值
    if(combo.selectvalue != null)
    {
     combo.select(combo.selectvalue);
    }
    else
    {
     //如果指定选中某个下标的值,-1为最后一个,> 0 则为第selectindex个
     if(combo.selectindex == -1)
     {
      console.log(data.length - 1);
      combo.select(data[data.length - 1][combo.valuefield]);
     }
     else
     {
      combo.select(data[combo.selectindex][combo.valuefield]);
     }

    }

    //触发选中事件
    //combo.fireevent('select', combo,store.getat(combo.selectindex));
   },
   failure: function (response) {
    //请求服务器失败
   }
  });

 }
});

调用实例:

{
    xtype: 'basecombobox',
    name: "typename",
    fieldlabel: "类型",
    displayfield: 'typename',
    valuefield: 'id',
    emptyindex:0,
    multiselect:false,
    url:"/itemtype/list",
    listeners:{
     select:'query'
    }
},

这样大大方便了我使用combobox,如果某种类型的combobox需要重复使用,建议还是直接定义好他,到需要用的时候一句:

 xtype: 'itemtypecombobox',就可以搞定了,代码看起来简洁又漂亮。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com