Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干向模板传递不同的最大值?_Javascript_Backbone.js - Fatal编程技术网

Javascript 主干向模板传递不同的最大值?

Javascript 主干向模板传递不同的最大值?,javascript,backbone.js,Javascript,Backbone.js,从理论上讲,这似乎有点容易,但我不是100%正确的代码编写 在视图中,如果我正在定义一个max变量,该变量返回集合中的属性points,我可以将该变量作为对象传递到模板中,如maxPoints.toJSON(),并获取该对象的属性 var maxPoints = this.collection.max(function(player){ return player.get('team') == home || player.get('team') == away ? player.get

从理论上讲,这似乎有点容易,但我不是100%正确的代码编写

在视图中,如果我正在定义一个max变量,该变量返回集合中的属性
points
,我可以将该变量作为对象传递到模板中,如
maxPoints.toJSON()
,并获取该对象的属性

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? 

现在我有了一个对象
maxasseds
,我可以将它传递到我的模板中,但我不确定这将如何工作。我如何才能与每个特定对象交互?

很抱歉,如果您删除了之前的问题并询问了另一个问题,那么这个答案不合适。这是您删除问题时我正要发送的答案:


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

有一个
模型
,我们称之为
玩家
,它代表一个拥有
名字
团队
积分
助攻
(至少)的玩家。您所指的
视图
持有
玩家的
集合
。这个
视图
显示了球员的情况,也突出了得分最多和助攻最多的球员

我对你的需求假设得太多了,但假设你想显示一个球员名单,上面有他们的信息,然后是突出显示的球员信息。检查这个,我准备展示我的方法

根据经验,除非有必要,否则不应该在DOM中设置数据,这就是为什么要使用JavaScript。由于您有一个
视图
,其中包含一个
集合
,因此该
视图
应同时包含对大多数得分球员和大多数助攻球员的引用。使用
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
    变量在代码中的位置以及它们是什么,所以我将它们作为成员变量放在视图中(它们只是字符串)
因此,当你想引用得分/助攻最多的球员时,你可以调用
视图中的一个函数。然后,您可以将其存储在变量中(这样您就可以在不进行进一步筛选的情况下获取它),或者直接在调用函数时使用它


如果您在中研究代码,您将看到比您要求的更多的内容。它向您展示了一种保持应用程序干净整洁的好方法(显然,它只是一个JSFIDLE)。尝试将
视图
保留在自己的业务中(可能存在并处理
模型
,拥有子视图列表并对其进行管理,因为它们是
集合
的一部分,或者只是其他子视图的管理者)。这样,这些视图就有了它们所需要的逻辑,而不必处理DOM中的数据。

哦,哇,对不起,我总是担心如果我删除了一个问题,我可能会浪费别人的时间,但我觉得我不够清楚,或者我把它弄得过于混乱,所以我决定尝试用一个新问题来简化它。谢谢你的努力,喝了一杯新鲜咖啡,我想我学到了一些东西,谢谢!读得好,谢谢你。我将max对象的
id
设置为一个数据属性,这样当
id
更改数据属性时,我可以向元素添加一个转换,当数据属性更改时,我可以添加一个转换,我可以添加一个没有该转换的转换,但因为它很难确定该对象是否为新对象。我打赌我可以想出一个更好的方法,但是确定对象是否更改了值相对比较困难,当然有一个backbone.js方法来确定新的最大值是否不等于旧的值,然后做点什么。很高兴我能帮上忙!请记住,您可以将任何内容传递给模板。您可以执行类似以下操作:
this.$el.html(this.template({maxPoints:this.getMaxPointsPlayer(),maxasses:this.getMaxAssistsPlayer()}))
。然后,在你的模板中,你可以做
啊完美,是的,我已经经历了数百次,我不敢相信我错过了关键是
maxPoints:this.getMaxPointsPlayer()
maxPoints
然后变得可访问,我忘了,尽管我已经做了很多次,但这确实是我所缺少的。我学会了你创造的那些方法,我会坚持下去,谢谢!!!
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);
},