您的位置:首页 > Web前端 > JavaScript

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;

}

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

谨记之
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: