backbone.js集合获取变量

时间:2011-05-10 06:27:58

标签: javascript collections backbone.js

这看起来很明显,但我不知何故错过了......

如何与backbone.js集合fetch()一起发送选项?

或者,从更广泛的角度来看:我在服务器上有一个大型数据集,在这种情况下是消息,我想通过集合访问它。看到可能有数以千计的消息我不想简单地一次获取和存储所有消息,因此我的集合必须至少理解限制和偏移。更不用说查询过滤或排序列表了。

骨干系列甚至可以解决这个问题吗?

干杯

4 个答案:

答案 0 :(得分:31)

我已经乱搞了Backbone几天了,我不得不立即处理这个问题而且我看了这个解决方案,但我发现它很笨重。在阅读了一些更多的主干文档之后,我发现你实际上可以覆盖fetch()方法中的任何jQuery.ajax选项。例如,

Posts = Backbone.Collections.extend({
  model: Post,
  url: '/posts'
});

现在,当你想调用fetch时,只需发送你想要的任何参数即可。 e.g。

var posts = new Posts();
posts.fetch({ data: { page: 3, pagesize: 10, sort: 'asc' } });

这将产生以下请求:

http://yourdomain/posts?page=3&pagesize=10&sort=asc

无论如何,我知道你已经接受了答案,但希望这会对某人有所帮助。

答案 1 :(得分:6)

考虑这段代码,当您实例化集合时,会传入偏移量,限制或排序的首选项。如果未提供首选项,则初始化采用默认值。然后url函数将这些附加到对服务器的调用中。此后,在处理来自服务器的响应时,您可能必须更新这些值(可能只是偏移量)。

MessageList = Backbone.Collection.extend({

    initialize: function(models, options) {
        options || (options = {});
        this.offset = options.offset || 0;
        this.limit  = options.limit || MessageList.DEFAULT_LIMIT;
        this.sortBy = options.sortBy || MessageList.DEFAULT_SORTBY; 
    },

    url: function() {
        return '/messages?' + 
               'offset=' + encodeURIComponent(this.offset) + '&' +
               'limit=' + encodeURIComponent(this.limit) + '&' + 
               'sort_by=' + encodeURIComponent(this.sortBy);
    },

    parse: function(response) {
       // Parse models
       // Parse offset, limit, sort by, etc
    }

}, {

    DEFAULT_LIMIT: 100,
    DEFAULT_SORTBY: 'name_asc'

});

答案 2 :(得分:1)

您可以在网址中添加一个ID,服务器可以使用该ID来选择发送数据。 E.g。

    var EventsCollection = Backbone.Collection.extend({

        model: Events,

    });

    var eventCollection = new EventsCollection();
    eventsCollection.url = 'foo?offset=10&limit=20';
    eventsCollection.fetch();

答案 3 :(得分:0)

覆盖集合的“url”函数并添加参数(?param = xyz)。

也可以使用fetch的options参数,因为它是传递给最终jQuery ajax调用的参数。因此,如果您在其中添加“数据”参数,则会使用它。