jQuery MiniUI

标题: 重复添加 [打印本页]

作者: 小葱儿    时间: 2013-10-10 14:30:07     标题: 重复添加

在添加的时候,我怎么验证对于我添加的这一项的我已经添加过,miniui里面有 自带的方法吗

作者: factory    时间: 2013-10-10 15:02:52

对象的话,去对照某个字段,比如id.是否有存在相同id的项了,有的话,就不添加
作者: x-strong    时间: 2013-10-11 12:09:22

本帖最后由 x-strong 于 2013-10-11 12:26 编辑

[attach]3024[/attach]


比如这里,要把上面的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);
复制代码


你试试看吧~~








欢迎光临 jQuery MiniUI (http://miniui.com/discuss/) Powered by Discuz! X2