今天客户反馈了一个问题,用户在配置菜单的是明明选择的是菜单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;
}
其中红颜色是新增的代码;
谨记之