转自:https://blog.csdn.net/luckypeng/article/details/46496151

ComboBox 是ExtJS中经常用到的控件,今天我们来讲一下它的一些用法。

ComboBox需要结合Store一起使用,下面是一个最简单的例子,结合本地的Store的用法:

var genderStore = Ext.create("Ext.data.Store", {fields: ["Name", "Value"], data: [ { Name: "男", Value: 1 }, { Name: "女", Value: 2 } ] }); var form = Ext.create("Ext.form.FormPanel", { layout: "column", title: "用户信息", border: false, margin: "10", width: 800, defaultType: "textfield", fieldDefaults: { labelAlign: 'right', labelWidth: 80, margin: "5 0", columnWidth: 0.3, msgTarget: "qtip", selectOnFocus: true }, items: [ { name: "UserName", fieldLabel: "姓名", allowBlank: false }, { xtype: "combobox", name: "Gender", fieldLabel: "性别", store: genderStore, editable: false, displayField: "Name", valueField: "Value", emptyText: "--请选择--", queryMode: "local" } ], renderTo: Ext.getBody() });

运行页面,截图如下:

这大概就是最简单的用法了,绑定一个store,设置显示和值的字段就可以了。代码注释如下:

 

首先我们来修改一下Store:

var genderStore = Ext.create("Ext.data.Store", {fields: ["Name", "Value"], autoLoad: true, proxy: { type: "ajax", actionMethods: { read: "POST" }, url: rootUrl + "Combo/FetchGenderList", reader: { type: "json", root: "data" } } });

此时,我们的Store会加载url中的Json参数,看看我们ASP.NET MVC  中的代码:

public JsonResult FetchGenderList()
{AjaxResult result = new AjaxResult(); List<GenderModel> genderList = new List<GenderModel>(); genderList.Add(new GenderModel() { Name = "男", Value = 1 }); genderList.Add(new GenderModel() { Name = "女", Value = 2 }); result.Set(true, genderList); return Json(result); }

由于在MVC中,默认的JsonResult不允许Get请求,所以我们在请求数据的时候使用了POST方式,这通过设置actionMethods来实现的,默认的actionMethods如下:

我们修改了proxy中的actionMethods:
这样就可以实现通过POST方式请求数据了。

此时form中的代码不用修改,直接编译运行就可以了。

combo内置了对多选的支持,只需要将multiSelect配置项设置为true即可。为了配合例子说明多选如何使用,我们在form中增加一个兴趣的字段,其配置项如下:

多选的store如下:
var interestStore = Ext.create("Ext.data.Store", {fields: ["InterestName", "InterestCode"], autoLoad: true, proxy: { type: "ajax", actionMethods: { read: "POST" }, url: rootUrl + "Combo/FetchInterestList", reader: { type: "json", root: "data" } } });

服务器的方法如下:

public JsonResult FetchInterestList()
{OperateResult result = new OperateResult(); List<InterestModel> interestList = new List<InterestModel>(); interestList.Add(new InterestModel() { InterestCode = "01", InterestName = "读书" }); interestList.Add(new InterestModel() { InterestCode = "02", InterestName = "摄影" }); interestList.Add(new InterestModel() { InterestCode = "03", InterestName = "集邮" }); interestList.Add(new InterestModel() { InterestCode = "04", InterestName = "音乐" }); interestList.Add(new InterestModel() { InterestCode = "05", InterestName = "种植" }); interestList.Add(new InterestModel() { InterestCode = "06", InterestName = "跳舞" }); result.Set(true, interestList); return Json(result); }

我都是硬编码,没有搞数据库动态获取什么的,只是一个演示。

编译代码之后刷新页面,看到新增的字段已经显示出来了,我们选择两个,效果图如下:

不管是什么控件,赋值和取值都是大家比较关心的。来看看赋值的代码:

buttons: [{text: "为性别赋值",handler: function () {this.up("form").down("combobox[name=Gender]").setValue(2); } }, { text: "为兴趣赋值", handler: function () { this.up("form").down("combobox[name=Interest]").setValue(["02", "04"]); } } ]

为form添加两个Button,分别为两个combobox赋值。

  • 对于单选的赋值,只要把value传递给combobox的setValue方法就可以了。
  • 对于多选的赋值,需要传递value的数组给setValue方法。

接下来看看获取值的方法,继续添加一个获取值的Button,代码如下:

{text: "获取Form值",handler: function () {var data = this.up("form").getValues(); Ext.MessageBox.alert("提示", "Gender:" + data.Gender + "<br />Interest:" + data.Interest); } }

data中包含了我们form中的值,它是Json格式的数据,我们可以方便的获取Gender和Interest的数据。运行代码的截图如下:

这些都是客户端的处理,在真正使用的时候,我们是需要将整个form提交给服务器的,那么接下来看看服务器的处理吧,继续添加按钮,用来提交form:

{text: "提交Form",handler: function () {var formCmp = this.up("form"); if (formCmp.isValid()) { formCmp.submit({ url: rootUrl + "Combo/SubmitFormData", mehtod: "POST", success: function (form, action) { var result = action.result; }, failure: function (form, action) { Ext.Msg.alert("failed", action.result.message); } }); } } }

服务器端的处理,我们首先添加一个UserModel:

set; }public int Gender { get; set; } public List<string> Interest { get; set; } }

然后是SubmitFormData的代码:

public JsonResult SubmitFormData(UserModel model)
{OperateResult result = new OperateResult(); result.Set(true); return Json(result); }

运行程序,我们打开跟踪调试,得到model的值如下:

我们服务器已经很好的接收到了值。

然后我们在看最后一个例子,使用form从服务器加载数据,这个也是很常用的。首先还是添加按钮,当点击的时候从服务器取数据:

{text: "加载Form数据",handler: function () {var formCmp = this.up("form"); formCmp.load({ url: rootUrl + "Combo/FetchFormData", mehtod: "POST", success: function (form, action) { }, failure: function (form, action) { Ext.Msg.alert("failed", action.result.message); } }); } }

然后是服务器的方法:

public JsonResult FetchFormData()
{OperateResult result = new OperateResult(); UserModel model = new UserModel(); model.UserName = "Jerry"; model.Gender = 2; model.Interest = new List<string>() { "01", "03", "06" }; result.Set(true, model); return Json(result); }

当单击按钮的时候,我们的form将加载到数据:

默认值

listeners : {
      afterRender : function(combo) {
         var firstValue = store.reader.jsonData[0].text;
         combo.setValue(firstValue);//同时下拉框会将与name为firstValue值对应的 text显示
      }
   }

combo.on('load',function(){Ext.getCmp("myCombo").setValue(1);});

显示的值

获取实际值是用,getValue()方法,

获取显示值是用,getRawValue()方法

45. ExtJS ComboBox 下拉列表详细用法相关推荐

  1. python画兔子代码_【后端开发】如何用Python画一只兔子——turtle库circle()画圆函数的详细用法介绍...

    周末学习了一下turtle库的基本函数,试着画了一只大耳朵小兔子,灵感来源是jellycat邦尼兔.turtle库中circle()函数用来画弧,但和通常先确定原点,再根据半径.夹角画弧的方法有所不同 ...

  2. 用python画小兔子_如何用Python画一只兔子——turtle库circle()画圆函数的详细用法介绍...

    周末学习了一下turtle库的基本函数,试着画了一只大耳朵小兔子,灵感来源是jellycat邦尼兔.turtle库中circle()函数用来画弧,但和通常先确定原点,再根据半径.夹角画弧的方法有所不同 ...

  3. ExtJS ComboBox 按拼字首字母过滤

    网上查询了一下关于ComboBox 按拼字首字母过滤的文章,有的写的很烂,要不就是不是很清晰明了.以下是我整理的代码,在此感谢提供ChinesePY.js(不知如何将文件一并传上来,各位可以在我的博客 ...

  4. Android命令行工具logcat详细用法!

    logcat是Android中一个命令行工具,可以用于得到程序的log信息. 见板凳详细说明!      本贴内容来自网络,引用网址为:http://hi.baidu.com/%C9%C1%D2%AB ...

  5. __declspec关键字详细用法

    __declspec关键字详细用法 2009-01-21 16:23 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与ext ...

  6. mysql left/right join算法效率分析_mysql left join,right join,inner join超详细用法分析

    MySQL left join,right join,inner join超详细用法分析 下面是例子分析 表A记录如下: aID        aNum 1           a20050111 2 ...

  7. python sort怎么用,Linux Sort命令详细用法(有实例)

    Linux Sort命令详细用法(有实例) sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! Linux sort命令进阶: 1 sort的工作原理 so ...

  8. vue性能优化-------vendor优化详细用法(瘦身),减小体积,引入cdn

    vue性能优化-------vendor优化详细用法(瘦身),减小体积,引入cdn 原创ChrisWang_ 最后发布于2019-05-24 10:25:58 阅读数 1332  收藏 展开 vue性 ...

  9. oracle rtrim(),Oracle ltrim() rtrim() 函数详细用法

    嘿嘿,今天在论坛里看了一篇帖子,讨论ltrim() 函数的详细用法,下面我借几个高手的回答总结一下: 先看几个实例: SQL> select ltrim('109224323','109') f ...

最新文章

  1. 整理了近500篇的AI论文,我发现了一个问题……
  2. 5G的频谱效率,到底有多高
  3. 16、17、18_使用gridspec定义多子图,条形图(Bar plots),分组条形图,堆叠条形图(Stacked bar chart),饼图(Pie plots),甜甜圈图,嵌套饼图
  4. php性能分析工具XHProf安装配置使用教程(linux精华版)
  5. python-23 xml.etree.ElementTree模块
  6. 内网网段划分ciso交换机配置
  7. EOJ_1064_树的层号表示法
  8. 飞利浦css6530b评测,带多种输入模式 无线接收器很方便_飞利浦 CSS6530B/93_音频评测-中关村在线...
  9. 【GTK】信号量(signal)大全
  10. 无人车致命车祸视频曝光:Uber技术失败的实锤,一场本可避免的灾难
  11. python exec_Python exec()
  12. java代码读写者问题_一整套Java线上故障排查技巧,爱了!
  13. Azure SQL作業
  14. [Python知识图谱] 四.Python和Gephi实现中国知网合作关系知识图谱
  15. 卸载、Jlink驱动不成功,提示“could not open INSTALL.LOG file” 解决办法
  16. android签到日历实现
  17. Git 官网无法下载 解决
  18. 软件测试工程师转正申请自我鉴定,it人员转正自我鉴定范文
  19. 外行人都能看懂的SpringCloud,错过了血亏! 1
  20. Windows 修改键盘映射(附带Linux下Ubuntu的修改方法)

热门文章

  1. linux快捷命令补齐,Linux Shell简介——自动补齐/命令行的历史记录/编辑命令行/可用的 Shell 快捷方式.doc...
  2. python办公实用功能_【一点资讯】实用办公技巧贴——当Python遇上PDF www.yidianzixun.com...
  3. 机器学习 K-means算法_0(Matlab实现)
  4. 顺序表链表 LeetCode专项练习 [19]\[24]
  5. [Bugku CTF——Pwn] pwn1
  6. C++11与设计模式的交流
  7. nginx.config widows 简单配置存储
  8. 今天学了瀑布流的js方法
  9. Cocos2d-x3.0 DrawNode吸取
  10. StringBuffer类和String 类的 equals 和 ==