ExtJS中findRecord方法的bug及规避方法

来源:互联网 发布:网络安全工程师 面经 编辑:程序博客网 时间:2024/04/30 10:18

今天客户反馈了一个问题,用户在配置菜单的是明明选择的是菜单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;
}


其中红颜色是新增的代码;

谨记之

0 0
原创粉丝点击