Javascript 如何在集合中添加集合?
问题:我使用的是backbone.js,我有一个Javascript 如何在集合中添加集合?,javascript,backbone.js,Javascript,Backbone.js,问题:我使用的是backbone.js,我有一个播放器视图,该视图的根元素是一个列表项节点 然后我有一个显示集合中所有玩家的players视图,该视图的根元素是。(非常简单的东西!) 这样做的结果将是 <ul> //The players collection root for the players collection view <li>Kobe Bryant is on the lakers</li> // The player model ro
播放器
视图,该视图的根元素是一个
列表项节点
然后我有一个显示集合中所有玩家的players
视图,该视图的根元素是
。(非常简单的东西!)
这样做的结果将是
<ul> //The players collection root for the players collection view
<li>Kobe Bryant is on the lakers</li> // The player model root element for the player model view
<li>LeBron James is on the heat</li> // The player model root element for the player model view
</ul>
我如何循环(或做任何最好的事情)以使我的视图得到这样的结果
<ul class="lakers">
<li>Kobe Bryant is on the lakers</li>
</ul>
<ul class="heat">
<li>LeBron James is on the heat</li>
</ul>
这显然存在一些问题,因为我们编写所有这些只是为了向根添加一个类,如果我们再次这样做,它将继续向根添加,这没有任何帮助
我对想法缺乏兴趣,我得到了我知道我想对每个球员进行分类的图片,但我无法完全理解。我倾向于一个球员的团队集合,我只是不知道如何匹配
this.team.get('name')==this.player.get('name')
//与此相关的东西。我不确定这是否真的有意义,我承认我需要帮助,哈哈。祝大家感恩节快乐,我怀疑今天是否有人在stackoverflow上。嗯……你真的不需要与球员和球队比赛
让我们从后端(数据)的角度考虑:
你有一个球员模型和一个团队模型
一个球员属于一个团队,一个团队有很多球员。为了找到球员所属的球队,我们只需在球员模型中添加外键:team_id:
团队id,是团队的id。通常您不想使用名称,因为:1。它可能会被更改,当您更改球队名称时,您不想更新所有球员。2、效率不高。(字符串字段与整数字段)ID始终是唯一的,您永远不应该更改它们
假设你有科比和湖人
//here's Kobe
var kobe = {
id: 24, //yea, all models should have their own primary key - id
name: 'Kobe',
team_id: 3
}
//this is Lakers in the database
var lakers = {
id: 3, //id for lakers,
name: 'Lakers'
}
现在,你如何找到科比所属球队的名字
比如说,您有一个团队集合(所有团队)
你可以将玩家包装在团队中,或者将团队分配给玩家,但你不必这样做。这实际上取决于你的应用程序的主要用途。(或视图)在一些大型应用程序中,你可能会发现人们将团队包装成玩家实例的地方,以及其他玩家包装成团队的地方
就你而言,你似乎还没有决定如何处理你的观点。而且,将两个集合传递到一个视图中并没有错(但当您必须这样做时,通常意味着您需要重新考虑如何组织页面)
实例化视图时,传递两个集合:
var playersView = new PlayersView({
players: players,
teams: teams
});
在模板中,如果您只是列出所有玩家:
<% _.each(players, function(player) {
<% var team = teams.get(player.get('team_id'))%>
<%= player.get('name') %> belongs to <%= team.get('name') %>
}) { %>
你好,玉蕊,这听起来很好,这次好多了。设置团队关键点确实很有意义。在过去的24小时里,我一直在认真学习,一遍又一遍地看教程,我开始明白了。我想这可能是解决方案,让我结束。好的,我通读了,这听起来很好。是时候喝杯咖啡,让它充满活力了!:)再次感谢Yurui这是更好的,有意义的,可能是因为我所做的所有研究,但这一切都在一起。我不知道你们怎么会这么擅长编程。不客气。:)做是最好的学习方式。(IMO)我没有很长的主干编码历史(大约1年)主干是一个很棒的库(而且很有趣!)。我喜欢我用骨气做的每一个项目。尽管我不再在我当前的项目中使用它,但我会继续回来并从中学习。祝你好运顺便说一句,我建议从我的一个朋友那里读这篇文章。他是一个超级聪明的开发者,我从他身上学到了很多。好的,我会的。。。我想我需要继续重读这篇文章,但到目前为止,我无法通过
players:
或teams:
仅通过collection:
var playersView=new playersView({collection:playersCollection,players:playersCollection,teams:teamscolection})代码>
//here's Kobe
var kobe = {
id: 24, //yea, all models should have their own primary key - id
name: 'Kobe',
team_id: 3
}
//this is Lakers in the database
var lakers = {
id: 3, //id for lakers,
name: 'Lakers'
}
var teams = new Teams([ ..all the teams! .. ]);
//to find the name of the team
teams.get(kobe.get('team_id')).get('name'); // you find the model first, then read its name.
PlayersView = Backbone.View.extend({
initialize: function(options) {
//in case teams/players is not passed to the view, we just set them to empty collections
this.teams = options.teams || new Teams([]);
this.players = options.players || new Players([]);
}
});
var playersView = new PlayersView({
players: players,
teams: teams
});
<% _.each(players, function(player) {
<% var team = teams.get(player.get('team_id'))%>
<%= player.get('name') %> belongs to <%= team.get('name') %>
}) { %>
<% _.each(teams, function(team) {
<ul class="<%= team.get('name')%>">
<% var teamPlayers = players.where({team_id: team.get('id')}) %>
<% _.each(teamPlayers, function(player) {
<li>
<%= player.get('name') %> belongs to <%= team.get('name') %>
</li>
<% }) %>
</ul>
}) { %>
//this is a view for a Team, it's model should be Team
TeamView = Backbone.View.extend({
className: function() {
return this.model.get('name');
}
});