这在理论上似乎很容易,但我并不是100%在适当的代码上写。
如果我在一个视图中定义了一个在集合中返回属性points
的max变量,我可以将该变量作为对象传递给我的模板maxPoints.toJSON()
,并获取该对象的属性。< / p>
var maxPoints = this.collection.max(function(player){
return player.get('team') == home || player.get('team') == away ? player.get('points') : 0;
});
//Pass to template
this.$el.find('.top-preformer').append(this.template(maxPoints.toJSON()));
//Inside the template using underscore.js I can get the `name` of the object returned
<%= name %>
//Easy, but now I am passing two objects, how do I access `name` for top points
//or `name` for top assists?
这很好,但是如果我想检索多个最大值并在模板中与它们交互怎么办?
var maxAssists = this.collection.max(function(player){
return player.get('team') == home || player.get('team') == away ? player.get('assists') : 0;
});
现在我有一个对象maxAssists
,我可以将其传递到我的模板中,但我不确定这是如何工作的。我怎么能与每个特定对象互动?
答案 0 :(得分:1)
如果你已经删除了之前的问题并且问了另一个问题,那么这个答案是不合适的,我很抱歉。这是您在删除问题时即将发送的答案:
我希望我能正确理解你的情景。让我总结一下以防万一:
有一个Model
,我们称之为Player
,它代表的玩家有name
,team
,points
和{{ 1}}(至少)。 assists
Collection
Players
由您所指的View
持有。这个View
显示了有关玩家的内容,同时也为玩家提供了大多数积分和最大帮助。
我对你的需求做了太多假设,但是假设你想要显示一个包含他们信息的玩家列表,然后是那些突出显示的信息。检查JSFiddle我准备好展示我的方法。
根据经验,你不应该在DOM中设置数据,除非它是非常必要的,这就是你毕竟使用JavaScript的原因。由于您的View
持有Collection
,因此View
应该是对大多数积分玩家和大多数助攻玩家的引用。使用max
函数,您可以这样做:
getMaxPointsPlayer: function () {
return this.getMax("points");
},
getMaxAssistsPlayer: function () {
return this.getMax("assists");
},
getMax : function (attribute) {
return this.collection.max(function (player) {
return player.get("team") === this.homeTeam || player.get("team") === this.awayTeam ? player.get(attribute) : 0;
}, this);
},
注意两件事:
===
而不是==
。搜索此网站以获取更多信息。home
和away
变量在哪里以及它们是什么,我将它们作为成员变量放在视图中(和他们只是字符串。)所以,当你想引用最多积分/助攻的玩家时,你会调用其中一个属于View
的函数。然后你可以将它存储在一个变量中(这样你就可以在没有进一步过滤的情况下得到它)或者直接从函数调用中使用它。
如果你研究JSFiddle中的代码,你会看到比你要求的更多的东西。它会向您展示一种保持应用程序干净整洁的好方法(显然,它只是一个JSFiddle)。尽量保持Views
对自己的业务(可能存在并处理Model
,有一个子视图列表并管理它们,因为它们属于Collection
或只是其他子视图的经理)。这样,这些视图就可以在不处理DOM中的数据的情况下获得所需的逻辑。