This is the third in a x part series about Meteor for beginners.
- Part One – Leaderboard: Add a button to change sort order
- Part Two – Leaderboard: Add a button to randomise players’ scores
- Part Three – Leaderboard: Add and remove players from the leaderboard (this post)
Exercise 3a: Remove a scientist from the leaderboard
This should be easy. First, let’s add a button.
<template name="leaderboard"> ... {{#if selected_name}} <div class="details"> <div class="name">{{selected_name}}</div> <input type="button" class="inc" value="Give 5 points" /> <input type="button" class="delete" value="Delete" /> </div> {{/if}} ... </template>
And now the event to fire when the button is clicked:
Template.leaderboard.events = { ... 'click input.delete': function() { if (confirm('Are you sure you want to delete the player?')) { Players.remove(Session.get("selected_player")); } }
N.B. the remove() function accepts either a selector i.e. Players.remove({_id: Session.get(“selected_player”)}), or a string (which is the _id) as its first argument.
Exercise 3b: Add a new scientist to the leaderboard
Let’s add a new “addPlayer” template to the html:
<template name="addPlayer"> <div> <div>Add a new player:</div> <span class="name">Name:</span> <input type="text" id="playerName" /> <span class="score">Score:</span> <input type="text" id="playerScore" /> <input type="button" class="add" value="Add player" /> </div> </template>
And now render it after the leaderboard template:
<body> <div id="outer"> {{> leaderboard}} {{> addPlayer}} </div> </body>
And now lets add template event code which will fire when the “Add player” button is clicked:
Template.player.events = { 'click': function () { Session.set("selected_player", this._id); } }; Template.addPlayer.events = { 'click input.add': function () { // todo - add validation Players.insert({name: playerName.value, score: Number(playerScore.value)}); } }; }
Browse the code on Github.
Thanks so much! Your blog is really helpful!!