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,实现如下:
Array.prototype.diff = function (a, fun)
{
if (a.length < 1)
{
return this;
}
var t = [];
var s = this;
for (var i = 0; i < s.length; i++)
{
var c = 0;
for (var j = 0; j < a.length; j++)
{
if (fun(s[i], a[j]))
{
c++;
}
}
if (c == j) //和所有的记录都不同时才保留
{
t.push(s[i]);
}
}
return t;
};
复制代码
添加方法中做如下处理:
var selected = xxx.grid.src.getSelecteds();//获取上面的datagrid的选中记录集(对象数组)
if (!selected) { return false; }
xxx.add.grid.src.deselectAll(false);
xxx.add.grid.src.clearSelect(false);
xxx.add.grid.src.removeRows(selected, false);//这里是删除添加过的
var adding = selected.diff(xxx .add.grid.temp.data,function (a, b) {return a.id != b.id; });
xxx .add.grid.temp.addRows(adding, 1);
xxx .add.grid.temp.accept();
复制代码
示例:
var arr1=[{id:1,name:'abc'},{id:2,name:'dgfdaf'},{id:3,name:'dfadfdf'}];
var arr2 = [{id:1,name:'abc'},{id:4,name:'rwtrtewrt'},{id:6,name:'bfgfgjlbm'}];
var diff = arr1.diff(arr2,function(a,b){
return a.id!=b.id;
});
console.log(diff);
复制代码
你试试看吧~~
欢迎光临 jQuery MiniUI (http://miniui.com/discuss/)
Powered by Discuz! X2