复选框选择模型中,删除多列时遍历Record数组的问题

为了在grid的复选框选择模型中删除选中的多行记录,的代码如下:

var records = _grid.getSelectionModel().getSelections();//得到选中的多行,返回值为Record数组

[color=red]//for (var i in records) { //为什么用这种方式遍历会出错呢???[/color]for (var i=0; i<records.length;i++){
//调用DWR方法删除数据
UserService.delUser(records.data);
}

之前用for (var i in records)对Record数组进行遍历出错了,检查以后发现这种遍历records除了取出Record对象外,最后还会取出个remove方法,所以传入DWR就出错了,后来改为for (var i=0; i<records.length;i++)遍历就正常了,请问这是什么原理呢?谁能详细说说

[b]问题补充:[/b]
哦?相当于Ext扩展了数组的功能,在里面加入了remove方法对吧?

那这两种遍历有什么区别吗?我JavaScript基础差,以为是一样的
for (var i=0; i<records.length;i++){
for (var i in records) {

这种能正常运行
for (var i=0; i<records.length;i++){
UserService.delUser(records[i].data);
}

这种报错,firebug发现遍历时i不是record对象而是数组的index值
for (var i in records){
UserService.delUser(i.data);
}

于是改成这种:记录可以正常删除了,但最后会传入个remove方法导致出错
for (var i in records){
UserService.delUser(records[i].data);
}

3个回答

这个是Ext里面 Array的扩展代码
[code="js"]
/**

  • @class Array
    /
    Ext.applyIf(Array.prototype, {
    /
    *

    • Checks whether or not the specified object exists in the array.
    • @param {Object} o The object to check for
    • @return {Number} The index of o in the array (or -1 if it is not found) */ indexOf : function(o){ for (var i = 0, len = this.length; i < len; i++){ if(this[i] == o) return i; } return -1; },

    /**

    • Removes the specified object from the array. If the object is not found nothing happens.
    • @param {Object} o The object to remove
    • @return {Array} this array */ remove : function(o){ var index = this.indexOf(o); if(index != -1){ this.splice(index, 1); } return this; } }); [/code]

//for (var i=0; i<records.length;i++){
for (var i in records) {
//调用DWR方法删除数据
//UserService.delUser(records.data);
UserService.delUser(i.data);
}

var i in records 并不是遍历数组,而是遍历records这个对象所有的属性

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问