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

在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[i], keys[i])) {
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[i], keys[i])) {
return i;
}
},

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

复制代码 代码如下:

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

我想大家都知道原因了,
当判断ID=1的时候,遇到1开头的ID的时候,这个时候就判断出问题了。

时间: 2024-10-12 23:20:24

EXTjs4.0的store的findRecord的BUG演示代码_extjs的相关文章

EXTJS4.0视频教程(网盘下载)

ExtJS是一种主要用于创建前端用户界面,是一个基本与后台技术无关的前端ajax框架. 功能丰富,无人能出其右. 无论是界面之美,还是功能之强,ext的表格控件都高居榜首. 单选行,多选行,高亮显示选中的行,拖拽改变列宽度,按列排序,这些基本功能ExtJS轻量级实现. 自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能. 再加上可编辑grid,添加新行,删除一或多行,提示多行数据,拖拽改变grid大小,gr

Extjs4.0 ComboBox如何实现三级联动_extjs

很多网友在问,Extjs4.0 ComboBox如何实现,好在之前用3.x实现过一个三级联动,如今用Extjs4.0来实现同样的联动效果.其中注意的一点就是,3.x中的model:'local'在Extjs4.0中用queryMode: 'local'来表示,而且在3.x中Load数据时用reload,但是在extjs4.0中要使用load来获取数据.如下图: 代码部分 先看HTML代码: <html > <head> <meta http-equiv="Conte

extjs4.0 应用 新建项目怎么添加包

问题描述 extjs4.0 应用 新建项目怎么添加包 如题所示,网上也百度了一些但是总是有些功能不能用,还有5.0兼容4.0吗?急救....拜谢大神 解决方案 extjs的相对容易配置,你先把java和eclipse的环境配置好,然后把extjs的包放到自己的项目中就行了,高版本未必完全兼容低版本,有可能修改了类名,或者某些方法不用了,你可以试试,正常情况下不会有大问题

jQuery Clone Bug解决代码_jquery

首先,jQuery事件绑定的时候,所有事件用$.data()方法存储到了$.cache里面,用data('events')可以反复获取到它们: 复制代码 代码如下: var $div = $('div.demo'), data = $div.data(); // 获取所有绑定事件: var events = data.events; // 除了window对象绑定事件的比较特殊: var windowEvents = $(window).data('__events__'); 在必要的时候,可以

AS3.0 图片变黑白 图片彩色变黑白代码

AS3.0 图片变黑白 图片彩色变黑白代码 复制代码代码如下:import flash.filters.ColorMatrixFilter;//导入色彩滤镜 var matrix:Array = [ 0.5,0.5,0.082,0,0,0.5,0.5,0.082,0,0,0.5,0.5,0.082,0,0,0,0,0,1,0 ];//定义色彩数组 var colorMat:ColorMatrixFilter = new ColorMatrixFilter(matrix);//创建滤镜对象 //添

vc++ 6.0 能自动查找自己编写的程序代码的错误吗??怎么设置,回答最好带着张图片

问题描述 vc++ 6.0 能自动查找自己编写的程序代码的错误吗??怎么设置,回答最好带着张图片 解决方案 程序的错误有两种,一个是语法错误,一个是语义错误. 我们用人类语言打比方: 老虎山羊吃了. 这句话语法错误,主语后面接谓语,谓语后面接宾语,不能颠倒. 一年有356天. 这句话是语义错误,在语法上没有问题,但是显然一年不是356天而是365/366天. 编译器只能发现语法错误.在你的图上,双击最下面那个窗格中的错误信息,可以定位到错误的行,你根据提示修改就可以了. 编译器不能发现语义错误,

VS 2010 和 .NET 4.0 系列之《ASP.NET, HTML, JavaScript 代码片段支持》篇

本系列文章导航 VS 2010 和 .NET 4.0 系列之<ASP.NET 4 中的SEO改进 >篇 VS 2010 和 .NET 4.0 系列之<干净的Web.Config文件 >篇 VS 2010 和 .NET 4.0 系列之<起始项目模板>篇 VS 2010 和 .NET 4.0 系列之<多定向支持>篇 VS 2010 和 .NET 4.0 系列之<多显示器支持>篇 VS 2010 和 .NET 4.0 系列之<代码优化的Web开发

extjs4.0,store自动加载时,能否传参数。

问题描述 autoLoad : true,proxy : {type : 'rest',// 通过拼接url的方式不太友好.//url : 'api/machine/device?organization='+ewayUser.organizationId,url : 'api/machine/device',reader : {type : 'json',root : 'data'},params : { organization : ewayUser.organizationId}} 解决方

Extjs4.0.7在用chart绘制图标时无法在IE中显示

问题描述 在使用chart绘制图表时可以在chorme和FireFox中 正常的显示 但是在IE9中却无法显示 只是显示出一个图表的标题这个是在chorme中显示的效果以下是在FireFox中显示的效果以下是在IE9中显示的效果 (只显示出图表的标题 以及X轴的标题) 一下是源代码Ext.onReady(function(){var dataStore = new Ext.data.JsonStore({fields:['name','percentAge','xxoo'],data:[{nam