combo组件在点击后会从后台装载数据,但是如果首次装载失败了,下拉框就不会再次装载数据。为了能在装载失败后再次点击时也能刷新数据,需要对combo组件的beforeQuery事件做个监听,判断如果combo的store里面没有数据,人为的触发一次load:
1,获取当前combo的store
2,判断store是否做过了load,因为首次下拉会触发store做load,如果不做判断会在首次下拉时触发2次load
3,判断store是否有数据
4,如果store做过load,并且记录数是0的情况下,触发reload方法
代码如下:
cb.on("beforequery", function(qe){
var store = this.getStore();
if (store && store.baseParams && store.baseParams.query != null && store.getCount() == 0) {
store.reload();
}
});
其中cb是combo的一个实例,store.baseParams.query是combo在装载数据后会创建出来的参数,目的是为了实现过滤,我们通过判断这个参数是否存在来证明combo有没有自己做过数据装载。需要注意的是,使用了reload方法,如果这个combo的store是预先定义好的某个变量,要避免在load方法中传输参数,否则reload也必须传递同样的参数。
以上方法实际证明可行,在点击combo时可以在firebug中查看控制台的ajax提交的内容。但是如果之前开发好的页面中有很多combo需要这样修改,就需要太多的修改,需要考虑如何侵入Ext.form.ComboBox的源码进行修改,修改方法可以参考:
ExtJS 中如何给Label添加click事件 一文。
现总结如下:
曾经尝试多种修改Ext.form.ComboBox的原型事件,都没有成功,可能是因为没有找对正确的事件。而直接写Ext.form.ComboBox.on("beforequery")肯定是不行的,因为Ext.form.ComboBox是个class,而没有被实例化。
但是在此文中使用的方法是针对组件的afterRender事件(这是每个组件都有的),使用createSequence添加一个后续的函数,在此函数中可以对当前的beforequery事件做绑定,此时因为是组件被渲染成功,因此当前的组件已经实例化了,随后在此处可以做任何想做的事情,不仅仅是绑定一个事件。
修改后的源码如下:
Ext.form.ComboBox.prototype.afterRender = Ext.form.ComboBox.prototype.afterRender.createSequence(function(){
this.on("beforequery", function(qe){
var store = this.getStore();
if (store && store.baseParams && store.baseParams.query != null && store.getCount() == 0) {
store.reload();
}
});
});
这段代码需要在整个页面的js装载后,且在有combo的窗口创建前执行。
总结一下,combo的beforeQuery事件会在每次点击时触发,但是是否会提交后台查询数据是由combo内部判断的,仅在首次触发。如果需要在装载失败后重新刷新,则需要人为的在此事件中装载数据(需要避免和首次触发时的自动装载重复)。
对ExtJs的组件统一添加新的功能,可以采用修改组件的afterRender事件,使用createSequence添加一个自定义函数,在此函数中做相应的事件绑定或其他属性修改的操作。
分享到:
相关推荐
首先,jQuery-ComboSelect的核心功能是将传统的单选或单行的下拉列表转换为一个可多选、具有搜索功能的下拉框。用户可以通过输入关键词快速筛选出所需选项,提高了数据查找和选择的效率。这对于那些包含大量选项的...
4. **前端接收数据**:前端的AJAX回调函数接收到响应后,解析JSON数据,将其设置为第二个ComboBox的数据源。 5. **刷新下拉框**:最后,刷新城市下拉框,显示新加载的数据。可以使用`store.load()`方法来实现。 在...
"combo-select 模糊查询下拉框"是一个前端开发组件,主要用于提高用户在网页中进行数据选择时的交互体验。这个组件结合了下拉框和模糊查询的功能,使得用户可以通过输入关键字快速找到并选择目标选项,尤其适用于...
在本章的学习中,我们将...在实际应用中, Combo组件的灵活性使得它能够在各种场景下发挥重要作用,如数据筛选、多选选项等。通过熟练掌握其加载方式、属性和事件,开发者能够创建更加用户友好的界面,提高用户体验。
你需要为CListCtrl类的派生类添加一个成员函数,处理这个消息,并设置编辑框的属性,以便用户可以输入数据。同时,还需要处理LVN_ENDLABELEDIT消息,以便在用户完成编辑后更新列表项的内容。 接下来,我们要实现的...
它提供了大量的UI组件,其中就包括了`ComboBox`(简称`Combo`)。`ComboBox`是一种允许用户从下拉列表中选择值的控件,同时也可以让用户手动输入文本。在很多情况下,为了提高用户体验和数据处理效率,我们需要对`...
在这种情况下,尝试使用`Ext.getCmp('store_color')`来获取Store会失败,因为`Ext.getCmp`是用于获取具有特定ID的组件,而Store并不直接对应于页面上的一个DOM元素。实际上,Store是存在于内存中的,它并不像组件...
ComboGrid 是 EasyUI 框架中的一种组件,它结合了 Combo(自定义下拉框)和 DataGrid(数据表格)的功能,为用户提供了一个在文本框中显示下拉列表,列表则是以表格形式呈现的数据选择界面。在第 34 章中,我们将...
了解了基本概念和应用场景后,我们来探讨Combo控件的功能特点。常见的功能包括: 1. 可编辑性:用户可以输入自定义值,这使得Combo控件具有一定的灵活性。 2. 下拉列表:提供预设选项,方便用户快速选择。 3. 多选...
COMBO Box是Windows GUI编程中常见的一种控件...这在需要动态管理COMBO Box内容的应用程序中尤其有用,比如配置设置或数据选择。开发者可以通过包含`DeleteItemCombobox.h`并实例化CDelItemComboBox类来使用这个功能。
- **参数设置**:根据需求配置参数,例如开启搜索功能。 ```javascript $('#myComboBox').combo({ search: true }); ``` ### 4. 示例代码分析 `Combo.htm`文件很可能是展示ComboJS功能的示例页面,包含HTML结构、...
这个代码片段的功能是将组合框`Combo1`中索引为4的项目值赋给文本框`Text1`,使得用户界面的文本框显示组合框的某个选定内容。这对于数据展示、用户输入验证或进一步的数据处理都是很有用的。 在实际应用中,`Combo...
在软件开发过程中,`Combo` 控件是一种常见的用户界面组件,主要用于提供列表选择的功能。本篇内容将深入探讨 `Combo` 控件的各种属性及其用途,帮助开发者更好地理解和运用这些属性来增强用户体验。 #### 二、属性...
在IT行业中,组合控件(Combo)和树控件(Tree)的结合是一种常见的数据展示和选择方式,尤其适用于处理多层次的数据结构。这种设计能够帮助用户以直观且交互性强的方式浏览和选择复杂的数据层级。标题“combo和树...
通过以上分析,我们可以看到,在MFC中实现一个功能完整的Combo Box并不复杂,关键在于正确地初始化、设置默认选项、监听并处理事件。理解这些基础之后,可以根据具体的应用场景,灵活选择不同类型的组合框,以满足...
### Combo使用添加、删除、查找、设置当前显示 在软件开发过程中,组合框(ComboBox)是一种常见的用户界面元素,用于提供一系列预定义选项供用户选择。本文将详细介绍如何使用组合框进行添加、删除、查找以及设置...
这个插件是一款集成了模糊搜索查询筛选功能的下拉选择组件,它允许用户通过输入关键字快速找到并选择所需项,极大地提高了用户在大量数据中的查找效率。 ### jQuery简介 jQuery是一款轻量级的JavaScript库,它的...
这个组件尤其适用于数据密集型应用,如表格数据管理或配置设置,它能帮助用户更有效地浏览和选择多维度的数据。 首先,我们来理解“下拉框”(Combox)这个基础组件。下拉框是一种常见的表单控件,它允许用户从一个...
/** 伊兰COMBO;强大的Ext单多选下拉列表控件;基于 LovCombo ; * 作者:中国.湖南.长沙.任文敏 * * 功能: * 1. 支持:★ 多选|单选 (isSingle:'N|Y') * 2. 多选支持: 全选/全不选 * 3. ★ 多选且分页支持:...
实现COMBO Box自动变宽通常需要编写一段VB代码,该代码会在程序运行时检查下拉列表中的每个项目,找出最长的字符串,并设置COMBO Box的宽度为该字符串的长度。以下是一个简单的示例: ```vb Private Sub Form_Load...