/assets/js/fanta.js

https://bitbucket.org/ccucco/bb_tuto1 · JavaScript · 230 lines · 171 code · 59 blank · 0 comment · 2 complexity · 633f35c02b4233d67606ff70aeb4a89a MD5 · raw file

  1. $(function(){
  2. var Player = Backbone.Model.extend({
  3. defaults: {
  4. name: 'player',
  5. role: null,
  6. status: 0
  7. },
  8. play: function() {
  9. this.status = 1;
  10. },
  11. substitute: function() {
  12. this.status = 2;
  13. }
  14. });
  15. var Team = Backbone.Collection.extend({
  16. model: Player,
  17. initialize: function() {
  18. this.on('add', this.addPlayer);
  19. },
  20. addPlayer: function() {
  21. console.log('player added to team');
  22. }
  23. });
  24. var Lineup = Backbone.Collection.extend({
  25. model: Player,
  26. initialize: function() {
  27. this.on('add', this.addPlayer);
  28. },
  29. addPlayer: function() {
  30. console.log('player added to line-up');
  31. }
  32. });
  33. var TeamView = Backbone.View.extend({
  34. el: $('#team-cnt'),
  35. initialize: function(opts) {
  36. this.list = $('#team-list');
  37. this.model = new Team();
  38. var that = this;
  39. $(opts.players).each(function(i, player){
  40. that.model.add(new Player(player));
  41. });
  42. this.listenTo(this.model, 'change:status', this.managePlayer);
  43. this.render();
  44. },
  45. setLineup: function(lineupView) {
  46. this.lineupView = lineupView;
  47. },
  48. render: function() {
  49. this.list.empty();
  50. this.model.each(function(player){
  51. var view = new PlayerView({model: player});
  52. this.list.append(view.render().el);
  53. }, this);
  54. return this;
  55. },
  56. addPlayer: function(player) {
  57. this.model.add(player);
  58. this.render();
  59. },
  60. managePlayer: function() {
  61. this.model.each(function(player){
  62. if (player.get('status')==1) {
  63. this.model.remove(player);
  64. console.log(player, 'managePlayer');
  65. this.lineupView.addPlayer(player);
  66. }
  67. }, this);
  68. this.render();
  69. }
  70. });
  71. var LineupView = Backbone.View.extend({
  72. el: $('#lineup-cnt'),
  73. initialize: function(opts) {
  74. this.list = $('#lineup-list');
  75. this.model = new Lineup();
  76. this.listenTo(this.model, 'change:status', this.managePlayer);
  77. this.render();
  78. },
  79. setTeam: function(teamView) {
  80. this.teamView = teamView;
  81. },
  82. render: function() {
  83. this.list.empty();
  84. this.model.each(function(player){
  85. var view = new PlayerPlayView({model: player});
  86. this.list.append(view.render().el);
  87. }, this);
  88. return this;
  89. },
  90. addPlayer: function(player) {
  91. this.model.add(player);
  92. this.render();
  93. },
  94. managePlayer: function() {
  95. this.model.each(function(player){
  96. if (player.get('status')==0) {
  97. this.model.remove(player);
  98. console.log(player, 'managePlayer');
  99. this.teamView.addPlayer(player);
  100. }
  101. }, this);
  102. this.render();
  103. }
  104. });
  105. var PlayerView = Backbone.View.extend({
  106. tagName: 'li',
  107. playerTpl: _.template( $('#player-template').html() ),
  108. events: {
  109. 'click': 'putPlayer',
  110. },
  111. initialize: function() {
  112. },
  113. render: function() {
  114. this.$el.html(this.playerTpl(this.model.toJSON()));
  115. return this;
  116. },
  117. putPlayer: function(){
  118. console.log(this.model.get('name'), 'click on player');
  119. this.model.set('status', 1);
  120. }
  121. });
  122. var PlayerPlayView = Backbone.View.extend({
  123. tagName: 'li',
  124. playerTpl: _.template( $('#player-play-template').html() ),
  125. events: {
  126. 'click': 'removePlayer',
  127. },
  128. initialize: function() {
  129. },
  130. render: function() {
  131. this.$el.html(this.playerTpl(this.model.toJSON()));
  132. return this;
  133. },
  134. removePlayer: function(){
  135. console.log(this.model.get('name'), 'click on play player');
  136. this.model.set('status', 0);
  137. }
  138. });
  139. var lineupview = new LineupView();
  140. var teamview = new TeamView({
  141. players: [
  142. {name: 'por1', role: 'P'},
  143. {name: 'por2', role: 'P'},
  144. {name: 'por3', role: 'P'},
  145. {name: 'dif1', role: 'D'},
  146. {name: 'dif2', role: 'D'},
  147. {name: 'dif3', role: 'D'},
  148. {name: 'dif4', role: 'D'},
  149. {name: 'dif5', role: 'D'},
  150. {name: 'dif6', role: 'D'},
  151. {name: 'dif7', role: 'D'},
  152. {name: 'dif8', role: 'D'},
  153. {name: 'cen1', role: 'C'},
  154. {name: 'cen2', role: 'C'},
  155. {name: 'cen3', role: 'C'},
  156. {name: 'cen4', role: 'C'},
  157. {name: 'cen5', role: 'C'},
  158. {name: 'cen6', role: 'C'},
  159. {name: 'cen7', role: 'C'},
  160. {name: 'cen8', role: 'C'},
  161. {name: 'att1', role: 'A'},
  162. {name: 'att2', role: 'A'},
  163. {name: 'att3', role: 'A'},
  164. {name: 'att4', role: 'A'},
  165. {name: 'att5', role: 'A'},
  166. {name: 'att6', role: 'A'}
  167. ]
  168. });
  169. teamview.setLineup(lineupview);
  170. lineupview.setTeam(teamview);
  171. });