从一个已有的集合中创建一个新的集合

Create a new collection from an existing one backbone.js

本文关键字:集合 一个 创建      更新时间:2023-09-26

我有一个视图,应该为所有球队中拥有最大points的球员渲染模型。有很多方法可以做到这一点,但这是我要走的路。

getMax : function(attribute) {
    return this.collection.max(function (team) {
        //return team.get('players').get(attribute);
        var test = new PlayersCollection(team.get('players'));
        console.log(test)
    }, this);
},

这是一个用于团队的marionette collectionView(很好地组合,但它像一个集合一样工作)。我理解为什么test返回每个队伍的队员,但我想不出一种方法将所有队员合并到一个集合中,然后查询谁是max points的领导者。

也就是说,如果有一种方法可以确定谁是leader,我可能可以避免合并它们,但由于集合是嵌套的,我有点难住了。

由于this.collection是团队,我认为this.collection.get('players').get('points')之类的东西可以让我获得所有团队的最大值,但这不起作用。

奇怪的解决方案1我做了一点黑客攻击,想出了这个。这有很多问题,因为它剥夺了骨干功能,这意味着我不能返回最大球员的模型,只有球员的点,就是这样。还在思考(脑出血lol)

teams = App.data.teams
var points1 = teams.get('5368dcc1227a937829b2cb4a').players.pluck('points')
console.log(points1)
var points2 = teams.get('5368dcd9227a937829b2cb4c').players.pluck('points')
console.log(points2)
var test = points1.concat(points2);
console.log(test)
var maxi = _.max(test);
console.log(maxi)

稍微好一点的解决方案2合并对象数组

teams = App.data.teams
var home = teams.get('5368dcc1227a937829b2cb4a').players.models;
var away = teams.get('5368dcd9227a937829b2cb4c').players.models;
all = home.concat(away);
console.log(all)

我想你要找的是这样的东西:

 _.max(this.collection.get('players').pluck('points'));

好的,所以我想我设法创造了一个比较优雅的解决方案,在主机上玩游戏真的可以教会你很多东西(如果你想变得更好,强烈推荐)。

teams = App.data.teams
var home = teams.get('5368dcc1227a937829b2cb4a').players.models;
var away = teams.get('5368dcd9227a937829b2cb4c').players.models;
all = home.concat(away);
leaders = new PlayersCollection(all)
function mostPoints() {
    return leaders.max(function(leader) {
        return leader.get('points');
    });
}
mostPoints(); 

现在该函数将返回所有人中得分最多的玩家的模型,非常酷!