Meteor.js, быть или не быть ?

Биденко Александр
Немного подробнее
Семь китов Meteor
●

Чистый JS

●

Живые обновления страниц(реактивность)

●

Чистая, мощная синхронизация данных

●

Компенсация задержки

●

Горячая замена кода

●

Своя система пакетов

●

Простота равна продуктивности
Система пакетов
●

Core packages

●

Meteor smart packages

●

Atmosphere smart packages
Работа с пакетами Meteor
$ meteor add packageName
$ sudo npm install -g meteorite
$ sudo npm install -g meteorite
$ mrt add foundation-5
Одним

едины
Один код на сервере и клиенте

Meteor.isClient
Meteor.isServer
Один код на сервере и клиенте
if (Meteor.isClient) {
//client code
}
if (Meteor.isServer) {
//server code
Meteor.startup(function () {
// code to run on server at startup
});
}
В качестве шаблонизатора Meteor использует

Пока нельзя заменить, обещают только в v 1.0
И наш шаблон
<head>
<title>страничка</title>
</head>
<body>
{{> hello}}
</body>
<template name="hello">
<h1>Some Text</h1>
{{greeting}}
<input type="button" value="Click" />
</template>
Поговорим о реактивности

.js
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.inc1': function () {
Players.update(Session.get("selected_player"), {$inc: {score: 5}});
}
});
Template.player.vents({
'click': function () {
Session.set("selected_player", this._id);
}
});
}
// 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});
}
});
}
<head>
<title>Leaderboard</title>
</head>
<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="inc1" 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>
Всем спасибо !
Дополнительная информация :
https://www.meteor.com/
http://meteorhacks.com/

FrontendLab: Meteor js: Быть или не Быть- Александр Биденко

  • 1.
    Meteor.js, быть илине быть ? Биденко Александр
  • 3.
  • 4.
    Семь китов Meteor ● ЧистыйJS ● Живые обновления страниц(реактивность) ● Чистая, мощная синхронизация данных ● Компенсация задержки ● Горячая замена кода ● Своя система пакетов ● Простота равна продуктивности
  • 5.
    Система пакетов ● Core packages ● Meteorsmart packages ● Atmosphere smart packages
  • 6.
  • 7.
    $ meteor addpackageName
  • 8.
    $ sudo npminstall -g meteorite
  • 9.
    $ sudo npminstall -g meteorite $ mrt add foundation-5
  • 10.
  • 11.
    Один код насервере и клиенте Meteor.isClient Meteor.isServer
  • 12.
    Один код насервере и клиенте if (Meteor.isClient) { //client code } if (Meteor.isServer) { //server code Meteor.startup(function () { // code to run on server at startup }); }
  • 13.
    В качестве шаблонизатораMeteor использует Пока нельзя заменить, обещают только в v 1.0
  • 14.
    И наш шаблон <head> <title>страничка</title> </head> <body> {{>hello}} </body> <template name="hello"> <h1>Some Text</h1> {{greeting}} <input type="button" value="Click" /> </template>
  • 15.
  • 16.
    Players = newMeteor.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.inc1': function () { Players.update(Session.get("selected_player"), {$inc: {score: 5}}); } }); Template.player.vents({ 'click': function () { Session.set("selected_player", this._id); } }); } // 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}); } }); }
  • 17.
    <head> <title>Leaderboard</title> </head> <body> <div id="outer"> {{> leaderboard}} </div> </body> <templatename="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="inc1" 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>
  • 18.
    Всем спасибо ! Дополнительнаяинформация : https://www.meteor.com/ http://meteorhacks.com/