• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    EXTjs4.0的store的findRecord的BUG演示代码

    发布者: 涵韵3588 | 发布时间: 2025-8-13 16:28| 查看数: 51| 评论数: 0|帖子模式

    在findRecord方法调用了 findRecord: function()这个方法

    findRecord: function() {
    var me = this,
    index = me.find.apply(me, arguments);
    return index !== -1 ? me.getAt(index) : null;
    },

    进入find方法

    find: function(property, value, start, anyMatch, caseSensitive, exactMatch) {
    var fn = this.createFilterFn(property, value, anyMatch, caseSensitive, exactMatch);
    return fn ? this.data.findIndexBy(fn, null, start) : -1;
    },
    createFilterFn方法
    createFilterFn: function(property, value, anyMatch, caseSensitive, exactMatch) {
    if (Ext.isEmpty(value)) {
    return false;
    }
    value = this.data.createValueMatcher(value, anyMatch, caseSensitive, exactMatch);
    return function(r) {
    return value.test(r.data[property]);
    };
    },
    findIndexBy : function(fn, scope, start){
    var me = this,
    keys = me.keys,
    items = me.items,
    i = start || 0,
    len = items.length;

    for (; i < len; i++) {
    if (fn.call(scope || me, items, keys)) {
    return i;
    }
    }
    return -1;
    },

    请注意
    value.test(r.data[property]);有BUG的地方就出在这里
    我这里用property是"ID"字段.
    这里是查询ID==1的这条记录record,
    它通过这个循环来做的

    for (; i < len; i++) {
    if (fn.call(scope || me, items, keys)) {
    return i;
    }
    },

    即每次都调用
    value.test(r.data[property])
    这个判断是通过正则表达式来做的,
    大家可以测试一下这个情况

    var value=new RegExp('1');
    var b=value.test('15')//这个是返回成功的。

    我想大家都知道原因了,
    当判断ID=1的时候,遇到1开头的ID的时候,这个时候就判断出问题了。
    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表