Meteor.js

Valentin Goșu

valentin.gosu@gmail.com

Ce este meteor.js?

Node.js on CRACK!

Exemplu

Leaderboard

Leaderboard

leaderboard.html

<body>
  <div id="outer">
    {{> leaderboard}}
  </div>
</body>

<template name="leaderboard">
  <div class="leaderboard">
    {{#each players}}
      {{> player}}
    {{/each}}
  </div>

  {{#if selected_name}}
  <div class="details">
    <div class="name">{{selected_name}}</div>
    <input type="button" class="inc" value="Give 5 points" />
  </div>
  {{else}}
  <div class="none">Click a player to select</div>
  {{/if}}
</template>

<template name="player">
  <div class="player {{selected}}">
    <span class="name">{{name}}</span>
    <span class="score">{{score}}</span>
  </div>
</template>

 

leaderboard.js

// Set up a collection to contain player information. On the server,
// it is backed by a MongoDB collection named "players".

Players = new Meteor.Collection("players");

if (Meteor.isClient) {
  Template.leaderboard.players = function () {
    return Players.find({}, {sort: {score: -1, name: 1}});
  };

  Template.leaderboard.selected_name = function () {
    var player = Players.findOne(Session.get("selected_player"));
    return player && player.name;
  };

  Template.player.selected = function () {
    return Session.equals("selected_player", this._id) ? "selected" : '';
  };

  Template.leaderboard.events({
    'click input.inc': function () {
      Players.update(Session.get("selected_player"), {$inc: {score: 5}});
    }
  });

  Template.player.events({
    'click': function () {
      Session.set("selected_player", this._id);
    }
  });
}

leaderboard.js

 

// On server startup, create some players if the database is empty.
if (Meteor.isServer) {
  Meteor.startup(function () {
    if (Players.find().count() === 0) {
      var names = ["Ada Lovelace",
                   "Grace Hopper",
                   "Marie Curie",
                   "Carl Friedrich Gauss",
                   "Nikola Tesla",
                   "Claude Shannon"];
      for (var i = 0; i < names.length; i++)
        Players.insert({name: names[i], score: Math.floor(Random.fraction()*10)*5});
    }
  });
}

 

leaderboard.css

.player.selected {
    background-color: yellow;
}

.player.selected .score {
    color: black;
}

.details, .none {
    font-weight: bold;
   
    border-style: dashed none none none;
    border-color: #ccc;
    border-width: 4px;
    margin: 50px 10px;
    padding: 10px 0px;
}

.none {
    color: #777;
}

.inc {
  cursor: pointer;
}

 

#outer {
    width: 600px;
    margin: 0 auto;
}

.player {
    cursor: pointer;
    padding: 5px;
}

.player .name {
    display: inline-block;
    width: 300px;
    font-size: 1.75em;
}

.player .score {
    display: inline-block;
    width: 100px;
    text-align: right;
   
    font-weight: bold;
    color: #777;
}

 

 

Avantaje

Javascript pur

Sincronizare client-server

Compensează pentru latența conexiunii

Securitatea este simplu de configurat

Documentatie bună: docs.meteor.com
Sute de biblioteci: (meteorite, npm)

Instalare

$ curl https://install.meteor.com/ | sh

$ meteor create myapp

$ cd myapp

$ meteor # pentru a rula aplicatia la localhost:3000

$ meteor deploy myapp.meteor.com

Extra

$ npm install -g meteorite

$ mrt add streams

# Lista de pachete pe https://atmospherejs.com/

# Pachete node.js - se adauga la packages.json

Resurse

http://meteor.com

http://docs.meteor.com

http://oortcloud.github.io/meteorite/

http://stackoverflow.com/questions/tagged/meteor

 

Meteor.js

By Valentin Gosu

Meteor.js

  • 1,705