jQuery MiniUI

 找回密码
 立即注册
查看: 1677|回复: 2
打印 上一主题 下一主题

重复添加 [复制链接]

Rank: 6Rank: 6

跳转到指定楼层
楼主
发表于 2013-10-10 14:30:07 |只看该作者 |倒序浏览
在添加的时候,我怎么验证对于我添加的这一项的我已经添加过,miniui里面有 自带的方法吗

Rank: 8Rank: 8

沙发
发表于 2013-10-10 15:02:52 |只看该作者
对象的话,去对照某个字段,比如id.是否有存在相同id的项了,有的话,就不添加

Rank: 4

板凳
发表于 2013-10-11 12:09:22 |只看该作者
本帖最后由 x-strong 于 2013-10-11 12:26 编辑


比如这里,要把上面的datagrid中选中的记录添加到下面的datagrid中,不允许重复,可通过js来处理,过滤掉下面datagrid中已有的记录,思路就是每次进行添加时,获取上面datagrid选中的记录集(对象数组)与下面的datagrid的数据记录集(对象数组)的差集即可——自定义一个获取数组差的方法——Array.prototype.diff,实现如下:
  1. Array.prototype.diff = function (a, fun)
  2.     {
  3.         if (a.length < 1)
  4.         {
  5.             return this;
  6.         }

  7.         var t = [];
  8.         var s = this;
  9.         for (var i = 0; i < s.length; i++)
  10.         {
  11.             var c = 0;
  12.             for (var j = 0; j < a.length; j++)
  13.             {
  14.                 if (fun(s[i], a[j]))
  15.                 {
  16.                     c++;
  17.                 }
  18.             }
  19.             if (c == j) //和所有的记录都不同时才保留
  20.             {
  21.                 t.push(s[i]);
  22.             }
  23.         }
  24.         return t;
  25.     };
复制代码
添加方法中做如下处理:
  1. var selected = xxx.grid.src.getSelecteds();//获取上面的datagrid的选中记录集(对象数组)
  2.     if (!selected)    { return false;   }
  3.         xxx.add.grid.src.deselectAll(false);
  4.         xxx.add.grid.src.clearSelect(false);
  5.         xxx.add.grid.src.removeRows(selected, false);//这里是删除添加过的
  6.         var adding = selected.diff(xxx .add.grid.temp.data,function (a, b) {return a.id != b.id; });
  7.          xxx .add.grid.temp.addRows(adding, 1);
  8.          xxx .add.grid.temp.accept();
复制代码


示例:
  1. var arr1=[{id:1,name:'abc'},{id:2,name:'dgfdaf'},{id:3,name:'dfadfdf'}];
  2.     var arr2 = [{id:1,name:'abc'},{id:4,name:'rwtrtewrt'},{id:6,name:'bfgfgjlbm'}];
  3.     var diff = arr1.diff(arr2,function(a,b){
  4.                             return a.id!=b.id;   
  5.                         });
  6.     console.log(diff);
复制代码


你试试看吧~~



附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

Archiver|普加软件

GMT+8, 2024-9-20 06:50 , Processed in 1.077870 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部