0

コレクションをフィルタリングする方法のように、モデルをフィルタリングすることが可能かどうか疑問に思っていましたか?

私はスポーツ サイトの検索機能を実行しています。検索結果をサッカー、テニス、バスケットボール、水泳、スポーツなどの種類でフィルタリングできるようにしたいと考えています。

これが私のコードです(filterSearch()メソッドを確認してください):

define([
    'jquery',
    'backbone',
    'underscore',
    'models/model'],

    function($, Backbone, _, Model){

    var Search = Model.extend({

        urlRoot: '/search',

        defaults: {
            query: ''
        },

        initialize: function(attrs, options) {

            if (typeof options === 'object') {
                this.router = options.router;
            }
        },

        filterSearch: function(type) {
            this.filter(function(data) {
               return data.get(type);
            });
        }

    });

    return Search;
});

JSON:

[
    {
        "search": [
            {
                "result": {
                    "query": "Vettel is world champion"
                },
                "type": "Formula 1",
                "id": 1
            },

            {
                "result": {
                    "query": "Romario of Brazil world cup 1994"
                },
                "type": "football",
                "id": 2
            },

            {
                "result": {
                    "query": "federe won again"
                },
                "type": "tennis",
                "id": 3
            }


        ]
    }
]
4

1 に答える 1

2

この場合、バックボーン コレクションではなくモデルを使用している特定の理由はありますか? 単一の検索結果のモデルを簡単に作成できます。

var searchResult = Backbone.Model.extend({});

および検索を表すコレクション

var Search = Backbone.Collection.extend({
    model : searchResult,
    urlRoot: '/search',

    filterSearch: function(type) {
       return this.where({'type' : type});
    },
    parse: function(response) {
        return response.search;
    }

});

それ以外の場合は、モデルで提供されている配列を検索するだけです。

...

filterSearch: function(type) {
    return _.where(this.get('search'), {'type' : type});
}
于 2013-10-14T17:06:10.520 に答える