Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干:从另一个集合的切片进行集合_Javascript_Backbone.js_Pagination - Fatal编程技术网

Javascript 主干:从另一个集合的切片进行集合

Javascript 主干:从另一个集合的切片进行集合,javascript,backbone.js,pagination,Javascript,Backbone.js,Pagination,我想要一个收藏的分页视图。我试着使用主干。分页器,但我就是不能让它工作 我想我应该自己做分页,我想最好是拥有我的全部收藏,然后发送一个大收藏的小收藏,每次有人点击“下一步”时都这样做 我尝试过这样做,但不起作用: var purchaseCollection = new purchaseItemCollection({url:endpoints.purchases}); purchaseCollection.fetch(); var purchaseRangeCollection = new

我想要一个收藏的分页视图。我试着使用主干。分页器,但我就是不能让它工作

我想我应该自己做分页,我想最好是拥有我的全部收藏,然后发送一个大收藏的小收藏,每次有人点击“下一步”时都这样做

我尝试过这样做,但不起作用:

var purchaseCollection = new purchaseItemCollection({url:endpoints.purchases});

purchaseCollection.fetch();

var purchaseRangeCollection = new Backbone.Collection(purchaseCollection.models),
    purchaseView = new purchaseItemCollectionView({collection:purchaseRangeCollection});
我的第二个系列只有一个模型,而它应该有几个

我想知道这是否是最好的方法


对于如何将收藏拆分为收藏或如何以另一种方式进行的建议,我们将不胜感激

您可以将完整集合的
模型
定义为另一个独立集合。 然后,在
fetch()
之后,您将获得您的集合作为完整集合的
模型

var PurchaseCollection = Backbone.Collection.extend({
    model: Backbone.Collection
})

var purchaseCollection = new PurchaseCollection({url:endpoints.purchases});
purchaseCollection.fetch()

purchaseCollection.each(function (purchaseItem, index) {
    //the purchaseItem is what you want...
    //do anything...
});

如果您想要一个。

只需记住集合构造函数有两个属性()。第一个是模型,第二个是url等选项。

您可以使用自定义对象控制表示当前选定模型列表的集合

比如说,

var Slicer = function(opts) {
    opts || (opts = {});

    // your big collection
    this.collection = opts.collection || new Backbone.Collection();

    // a collection filled with the currently selected models
    this.sliced = new Backbone.Collection();
};

_.extend(Slicer.prototype, Backbone.Events, {
    // a method to slice the original collection and fill the container
    slice: function(begin, end) {
        var models = this.collection.models.slice(begin, end);
        this.sliced.reset(models);

        // triggers a custom event for convenience
        this.trigger('sliced', this.sliced);
    }
});
然后,您将创建此控制器的实例,并在此对象上侦听自定义事件
sliced
,或在
sliced
集合上的
reset
事件以更新视图:

var controller = new Slicer({
    collection: purchaseCollection
});
controller.on('sliced', function(c) {
    console.log('sliced', c.pluck('id'));
});
controller.sliced.on('reset', function(c) {
    console.log('reset', c.pluck('id'));
});
还有一个演示

请注意,您还必须考虑到
获取的异步性质,您不能立即处理模型。在此设置中,您可以执行以下操作

var purchaseCollection = new purchaseItemCollection(
    [], // you have to pass an array
    {url:endpoints.purchases} // and then your options
);
purchaseCollection.fetch().then(function() {
    // do what you want
    // for example
    controller.slice(0, 10);
});