如何使用Backbone对集合进行预取

时间:2015-01-13 19:04:22

标签: javascript backbone.js

我有以下方法对我的集合执行提取,然后调用render函数来显示结果。这一切都很好,每次用户下到页面底部时都会触发。

然而,在此获取期间,我想预取下一批项目,以便为用户提供更好的体验。我不知道如何实现这一目标。我考虑做另一个this.collection.fetch(检查我的代码),然后将结果分配给变量,但我不确定这是不好的做法。

然后我可以咨询这个变量,看看下次用户到达页面底部时是否有任何内容?

有没有人做过类似的事情并能给我一些指导?

loadItems: function() {

    var that = this;

    this.collection.fetch({
        data: {"offset": this.offset, "limit": this.limit}, 
        success: function () {
            that.render();

            that.offset += that.limit;

            //Maybe I can do another fetch here
            this.collection.fetch({
                data: {"skip": this.skip, "limit": this.limit, "sort": this.sortKey}
                success: function () {
                    //However I'm not really sure how I would get the results and assign them to a variable
                }
            });
        }
    });
},
render: function() {
    var self = this;

    _(this.collection.models).each(function(product){
        self.appendItem(product);
    }, this);
},
appendItem: function(product) {
    var productView = new ProductView({
        model: product
    });
    $(this.el).find(".products-list").append(productView.render().el);
}

1 个答案:

答案 0 :(得分:1)

为什么不在主页加载时抓取?

var data = collection.fetch();

当它到达底部时你会查看。更新(更新);然后通过再次获取data = collection.fetch();

来更新数据

因此,数据保持收集状态,当它第二次触及底部时,它将显示已经取出并存储在数据中的内容,然后再次获取并更新下一次打击的数据......

var data;
collection.fetch({
 success: function(model) {
    data=model.toJSON();
 }
})