Backbone将不同的最大值传递给模板?

时间:2014-01-02 17:22:24

标签: javascript backbone.js

这在理论上似乎很容易,但我并不是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,我可以将其传递到我的模板中,但我不确定这是如何工作的。我怎么能与每个特定对象互动?

1 个答案:

答案 0 :(得分:1)

如果你已经删除了之前的问题并且问了另一个问题,那么这个答案是不合适的,我很抱歉。这是您在删除问题时即将发送的答案:


我希望我能正确理解你的情景。让我总结一下以防万一:

有一个Model,我们称之为Player,它代表的玩家有nameteampoints和{{ 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);
},

注意两件事:

  • 您应该尽可能使用===而不是==。搜索此网站以获取更多信息。
  • 由于我不知道代码中的homeaway变量在哪里以及它们是什么,我将它们作为成员变量放在视图中(和他们只是字符串。)

所以,当你想引用最多积分/助攻的玩家时,你会调用其中一个属于View的函数。然后你可以将它存储在一个变量中(这样你就可以在没有进一步过滤的情况下得到它)或者直接从函数调用中使用它。

如果你研究JSFiddle中的代码,你会看到比你要求的更多的东西。它会向您展示一种保持应用程序干净整洁的好方法(显然,它只是一个JSFiddle)。尽量保持Views对自己的业务(可能存在并处理Model,有一个子视图列表并管理它们,因为它们属于Collection或只是其他子视图的经理)。这样,这些视图就可以在不处理DOM中的数据的情况下获得所需的逻辑。