从现有的backbone.js创建一个新的集合

时间:2014-05-07 01:07:25

标签: javascript backbone.js collections marionette

我有一个视图应该为所有团队中最大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);
},

这是一个用于团队的木偶集合视图(很好的复合,但它的工作方式就像一个集合)。我理解为什么test会返回每个团队的玩家,但我想不出将所有玩家合并为一个集合然后查询谁是max points领导者的方法。

那说如果有办法确定谁是领导者,我可以避免首先将它们合并,但由于这个集合是嵌套的,我有点难过。

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

奇怪的解决方案1 ​​我做了一点点黑客攻击并想出了这个。很多问题因为它剥离了主干功能意味着我不能返回最大玩家的模型,只有那个玩家的分数,就是这样......仍在思考(大脑出血哈哈)

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)

2 个答案:

答案 0 :(得分:1)

我认为你要找的是这样的:

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

答案 1 :(得分:0)

好吧所以我觉得我设法创造了一个有点优雅的解决方案,在控制台玩游戏可以真正教你很多(如果你想要变得更好,强烈推荐)。

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(); 

现在该功能将返回每个人中得分最多的玩家的模型,非常酷!