我希望有些人可以帮助我,我已经设法创建了一个工具,可以根据各种属性(基本上是模型的所有属性)搜索/过滤集合模型。
filterUsers: function (collection, filterValue) {
var filteredCollection;
if (filterValue === "") {
return collection.toJSON();
}
return filteredCollection = collection.filter(function (data) {
return _.some(_.values(data.toJSON()), function (value) {
if (value != undefined) {
value = (!isNaN(value) ? value.toString() : value);
//var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return value.indexOf(filterValue) >= 0;
}
});
});
}
现在这适用于一个集合,但是可以过滤多个(2)集合吗?并返回一组合并的结果?
答案 0 :(得分:0)
如果要过滤两个集合,可以在两个集合上运行过滤器函数,然后合并结果。
if (filterValue === "") {
return collection.toJSON();
}
var filterThroughValue = function(data) {
return _.some(_.values(data.toJSON()), function(value) {
if( value != undefined ) {
value = (!isNaN(value) ? value.toString() : value);
//var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return value.indexOf(filterValue) >= 0;
}
});
};
return filteredCollection = _.union(
collection1.filter(filterThroughValue),
collection2.filter(filterThroughValue)
);
}
基本上,您要声明过滤器功能(如何过滤您的值),然后将其作为.filter函数的参数传递。
以下划线结帐_.union
功能:http://documentcloud.github.io/underscore/#union