2

私は、テーブルに入れたページ分割されたコレクションを返すバックボーン アプリケーションを持っています。以下に示すように、一度に 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 つのフィールドのみをフィルター処理できます。たとえば、アカウント: 123 でフィルタリングしたいのですが、そのうちの所有者はボブです。現時点では、アカウントまたは所有者のいずれかでのみフィルタリングできます。

4

2 に答える 2

0

私の知る限りSeFilter、の配列値に渡すことができますfields

したがって、たとえば、選択リストの使用を避けて、次のように設定することができます。

var fields = ["Account","Owner"];
于 2012-08-30T08:04:11.603 に答える
0

setFilter メソッドには詳しくありませんが、アンダースコアを使用しないのはなぜですか? 例は次のとおりです。

var filteredContent = _.filter(this.collection, function(model)
{  
    return model.Account === 123 && model.Owner === "Bob"; 
});
于 2012-08-29T19:31:41.240 に答える