Backbone Paginator - 在多个字段上使用setFilter

时间:2012-08-29 19:02:18

标签: backbone.js

我有一个骨干应用程序,它返回一个我放入表中的分页集合。我可以按时在1列上应用过滤器,如下所示:

查看:

(function (views) {
    views.PaginatedView = Backbone.View.extend({
        events: {
            'click a.filter': 'filter'
        },
        getFilterField: function () {
            return $('#filterByOption').val();
        },
        getFilterValue: function () {
            return $('#filterString').val();
        },
        filter: function (e) {
            e.preventDefault();

            var fields = this.getFilterField(); // returns a value from a dropdown
            var filter = this.getFilterValue(); // returns a value from my input
            this.collection.setFilter(fields, filter);
            this.collection.pager();
        }
    });
})(app.views);

模板:

<select id="filterByOption">
    <option value="Account">Account</option>
    <option value="Owner">Owner</option>
</select>

<span class="cell sort">
    <input id="filterString" type="text" class="cell" />
    <a href="#" class="filter btn small">Filter</a>
</span>

我的问题是:我想对其他字段应用更多过滤器,但据我所知,setFilter函数每次只允许过滤1个字段。例如:我想过滤Account:123,其中有一个所有者:Bob。目前我只能过滤账户或所有者。

2 个答案:

答案 0 :(得分:0)

我不熟悉setFilter方法,但为什么不使用下划线?一个例子是:

var filteredContent = _.filter(this.collection, function(model)
{  
    return model.Account === 123 && model.Owner === "Bob"; 
});

答案 1 :(得分:0)

据我所知,您可以将SeFilter的数组值传递给fields

因此,例如,您可以避免使用选择列表,只需设置:

var fields = ["Account","Owner"];