从SpineJS fetch()返回的限制记录

时间:2012-10-11 12:57:09

标签: javascript spine.js

我想在我正在编写的应用程序中设置一些限制返回结果的路径。

目前我的主控制器中有以下内容:

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()只返回所有记录的子集,以便刷新事件只接收这些记录作为参数?

2 个答案:

答案 0 :(得分:1)

因此,在过去几个晚上思考并得出自己的结论后,我会回答我认为正确的答案。希望它可以帮助别人。

问题实际上归结为在数据到达刷新方法之前是否适合对数据进行过滤。获取正在命中服务器并刷新接收那些记录 - 除非你开始使用脊椎内部,否则不会改变。

我基本上是在询问如何过滤数据客户端。更好的方法是通过子集URL仅请求数据子集,然后不必担心如何减少 我需要的数据。实际上,这可能是最明智的方法,因为这样做的唯一其他方法(我现在可以看到)是通过让默认提取发生,然后隐藏所有那些没有出现在我的数据子集中的记录

答案 1 :(得分: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.