Backbone在多个属性上过滤多个集合

时间:2014-08-20 18:21:37

标签: javascript backbone.js backbone-collections

我希望有些人可以帮助我,我已经设法创建了一个工具,可以根据各种属性(基本上是模型的所有属性)搜索/过滤集合模型。

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)集合吗?并返回一组合并的结果?

1 个答案:

答案 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