ExtJS中findRecord方法的bug及规避方法
2014-07-01 15:16
267 查看
今天客户反馈了一个问题,用户在配置菜单的是明明选择的是菜单1,显示的却是菜单2,而用这个用户登录系统后,系统的菜单却是没有问题的。
于是开始跟踪代码,通过debug发现,findRecord方法在实际比较的时候采用的是正则表达式,所以1和10其返回结果是相同的,这在使用id这个字段的时候会出现这种问题。那么如何修改呢,不应该修改源代码,因为这种比较在其它字符串字段上是没有问题的,所以为了快速处理问题,我们采用如下方法来解决,思路如下:
1、使用findRecord函数查到记录
2、判断此记录的id字段值是否和给定的条件相等,如果相等则继续原来的流程,否则3
3、使用each函数逐个判断,直到找出给定的记录;
这个方法好处如下:
1、原来的代码不用改动,只需要增加一个特殊处理;
2、效率稍微有所降低,但是没有增加太多系统复杂性,只是针对这个问题来特殊处理一下,性价比还是比较高的。
代码如下:
var store = Ext.StoreMgr.get('menuitemstore');
for(var i = 0, max = itemIds.length; i < max; i++){
var record = store.findRecord("id", itemIds[i]);
if(record !== null && record.get('id') !== parseInt(itemIds[i])){
record = null;
store.each(function(r){
if(r.get('id') === parseInt(itemIds[i])){
record = r;
}
})
}
var item = "";
if(record !== null){
item = record.get('name');
}
items = (items === null)? item:items+',' + item;
}
其中红颜色是新增的代码;
谨记之
于是开始跟踪代码,通过debug发现,findRecord方法在实际比较的时候采用的是正则表达式,所以1和10其返回结果是相同的,这在使用id这个字段的时候会出现这种问题。那么如何修改呢,不应该修改源代码,因为这种比较在其它字符串字段上是没有问题的,所以为了快速处理问题,我们采用如下方法来解决,思路如下:
1、使用findRecord函数查到记录
2、判断此记录的id字段值是否和给定的条件相等,如果相等则继续原来的流程,否则3
3、使用each函数逐个判断,直到找出给定的记录;
这个方法好处如下:
1、原来的代码不用改动,只需要增加一个特殊处理;
2、效率稍微有所降低,但是没有增加太多系统复杂性,只是针对这个问题来特殊处理一下,性价比还是比较高的。
代码如下:
var store = Ext.StoreMgr.get('menuitemstore');
for(var i = 0, max = itemIds.length; i < max; i++){
var record = store.findRecord("id", itemIds[i]);
if(record !== null && record.get('id') !== parseInt(itemIds[i])){
record = null;
store.each(function(r){
if(r.get('id') === parseInt(itemIds[i])){
record = r;
}
})
}
var item = "";
if(record !== null){
item = record.get('name');
}
items = (items === null)? item:items+',' + item;
}
其中红颜色是新增的代码;
谨记之
相关文章推荐
- EXTjs4.1 的store的findRecord的BUG.
- JQuery find方法Bug
- extjs中form与grid交互数据(record)的方法
- VS2008 “Find in Files”无法查找bug的解决方法
- ExtJS Store的find方法精确查找
- Extjs findRecord find
- 修改Extjs的findByType方法,弥补其不足
- extjs中form与grid交互数据(record)的方法
- EXTjs4.0的store的findRecord的BUG演示代码
- 【BUG】ExtJS3.4.0的Grid中垂直滚动条导致列错位的解决方法
- D200的新bug、原因及规避方法
- 【Extjs】ExtJS Bug之IE8对象不支持此属性或方法
- Extjs 3.3 隐藏工具栏 出现Bug 的解决方法
- EXTjs loadRecord方法 将grid中的数据 加载到form表单中去
- Extjs Store findRecord 查询API
- Dynamics CRM 2011 快速查找 出现异常 QuickFindQueryRecordLimit exceeded. Cannot perform this operation 的解决方法
- Yii之Active Record find()方法
- ExtJS--Extjs中创建或得到record和store的几种方法代码
- EXTjs4.0 的store的findRecord的BUG.