Backbone.Collection获得第一个n作为新集合

时间:2016-03-31 15:12:38

标签: javascript backbone.js typescript backbone-collections

我有Backbone.Collection这样设置:

let col = new Backbone.Collection();

let model1 = new Backbone.Model();
model1.set('name', 'first');
col.add(model1);

let model2 = new Backbone.Model();
model2.set('name', 'second');
col.add(model2);

let model3 = new Backbone.Model();
model3.set('name', 'third');
col.add(model3);

当我尝试从集合中选择前两个模型时:

let firstTwo = col.first(2);

firstTwo包含model1model2作为数组。

如何将前两个作为Backbone.Collection而不是手动将它们全部添加到新集合中?

2 个答案:

答案 0 :(得分:2)

你必须创建一个新的Collection&添加它们。好消息是创建一个新的集合非常便宜,并且模型实例在完整和部分集合中都是相同的。

集合会自动在其中内置一些Underscore方法。但是这些方法都返回了Model对象的数组。如果您想要获取Collection实例,最好的办法是在Collection类上创建另一个方法。但是,您仍然可以使用Underscore方法进行过滤。

var MyCollection = Backbone.Collection.extend({
    // ...
    firstAsCollection: function(numItems) {
        var models = this.first(numItems);
        return new MyCollection(models);
    }
});

答案 1 :(得分:0)

您可以在col模型中创建一个类似于以下内容的函数:

sublist: function (numberOfElements) {
     var i = 0;
     return this.filter(function (model) {
                if (i <= numberOfElements){
                    return true;
                }
                return false;
     });
}