0

私が書いているアプリに、返される結果の数を制限するいくつかのルートが必要です。

現在、メインコントローラーには次のものがあります。

init: function(){

    MyModel.bind("refresh", this.proxy(this.addAll));

    this.routes({
        "/subset": function(){
            var items = MyModel.select(function(model){
                //Do a test on model
                return (itemToBeReturned === true);
            });
        }
    });
    MyModel.fetch();
},

addAll: function () {
    MyModel.each(this.proxy(this.addOne));
},

addOne: function (model){
   //Do some stuff with model
}

元のデータのサブセットを取得する多くのルートを定義したいと考えています。ご覧のとおり、現時点ではルート内でフィルタリングしている結果に対して何もしていません。

更新イベントがそれらのレコードのみを引数として受け取るように、fetch() がすべてのレコードのサブセットのみを返すようにする方法はありますか?

4

2 に答える 2

1

ですから、ここ数晩熟考し、私自身の結論を導き出した後、ここで正しい答えだと思うもので応答します。うまくいけば、それは誰かを助けるかもしれません。

問題は、refresh メソッドに到達する前にデータに対してこのフィルタリングを行うことが適切かどうかということです。フェッチはサーバーにヒットし、リフレッシュはそれらのレコードを受け取ります - あなたがスパインの内部で遊んでいない限り、それは変わりません。

私は基本的に、クライアント側のデータをフィルタリングする方法を尋ねています。サブセット URL を介してデータのサブセットのみを要求し、必要なデータのみに削減する方法について心配する必要がない方がよい場合があります。実際、これを行う唯一の他の方法 (私が今見ることができる) は、デフォルトのフェッチを発生させ、データサブセットに表示されないすべてのレコードを非表示にすることであることを考えると、これはおそらく最も賢明なアプローチです。 .

于 2012-10-13T22:33:40.180 に答える
0

私は基本的に同じようなことをしています。これが機能するものです(私が見たもの):

Model.extend({
    url: '/api/model', //whatever your endpoint is
    filter: function(id) {  //pass in whatever you want it to match
        return this.select(function(c) { //c is the record it is checking
            return c.id === id; //returns true and displays the record
        });
    }
});

var filteredItems = Model.filter(id); //filteredItems is a subset of the records.
Controller.render(filteredItems); //pass them to your render function, or do whatever you want with them.
于 2013-03-14T20:19:25.380 に答える