首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主干:从另一个集合的切片中生成集合

主干:从另一个集合的切片中生成集合
EN

Stack Overflow用户
提问于 2014-07-09 22:06:12
回答 3查看 642关注 0票数 1

我想要一本收藏的分页视图。我试过使用Backbone.Paginator,但我无法使它工作。

我想我应该自己做分页,我认为最好是把我的全部收藏,然后发送一个大的一个小集合,并这样做,每次点击‘下一个’。

我试过这样做,但没有用:

代码语言:javascript
复制
var purchaseCollection = new purchaseItemCollection({url:endpoints.purchases});

purchaseCollection.fetch();

var purchaseRangeCollection = new Backbone.Collection(purchaseCollection.models),
    purchaseView = new purchaseItemCollectionView({collection:purchaseRangeCollection});

我的第二个收藏只有一个模型,当它应该有几个。

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

任何关于如何将集合拆分为集合()的建议(),或者如何以另一种方式将集合拆分成集合()的方法,都将是非常感谢的!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-11 14:59:42

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

例如,

代码语言:javascript
复制
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);
    }
});

然后,您将创建此控制器的一个实例,并侦听此对象上的自定义事件slicedsliced集合上的reset事件以更新您的视图:

代码语言:javascript
复制
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'));
});

和一个播放http://jsfiddle.net/nikoshr/zjgkF/的演示

请注意,您还必须考虑到fetch的异步特性,您不能立即处理这些模型。在这个设置中,您将执行以下操作

代码语言:javascript
复制
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);
});
票数 1
EN

Stack Overflow用户

发布于 2014-07-10 05:38:49

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

代码语言:javascript
复制
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...
});

如果你想要演示,点击这里的话。

票数 1
EN

Stack Overflow用户

发布于 2014-07-11 14:24:42

只需记住集合构造函数有两个属性(http://backbonejs.org/#Collection-constructor)。第一个是模型,第二个是诸如url等选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24664510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档