JCAT
2009-05-03 10:18 阅读 169

复选框选择模型中,删除多列时遍历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条回答 默认 最新

  • 已采纳
    zhoujuan520 zhoujuan520 2009-05-03 10:27

    这个是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]
    点赞 评论 复制链接分享
  • zhoujuan520 zhoujuan520 2009-05-03 10:24

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

    点赞 评论 复制链接分享
  • zhoujuan520 zhoujuan520 2009-05-03 11:18

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

    点赞 评论 复制链接分享

相关推荐