MeteorJS
Web app development
ReactJS ecosystem vs MeteorJS
ReactJS and friends
Meteor
MeteorJS, Magic?
The origin
MeteorJS, Magic?
MeteorJS, Magic?
Questions so far?
Time for some programming :)
Time for some programming :)
meteor create search-box
meteor
http://localhost:3000
Inspecting the generated code
Time for some programming :)
Changing the folder structure
- client (templates/stylesheets)
-lib/collection
-public
-server
Messing around with the
original files...
Time for some programming :)
Changing the folder structure
-Create Layout file.
<template name="layout">
{{>yield}}
<hr/>
<div class="container">
<footer>
<p>© The Amazing Search Box. ·</p>
</footer>
</div>
</template>
Time for some programming :)
Changing the folder structure
-Rename search-box.html to home.
<template name="home">
<button>Click Me</button>
<p>You've pressed the button {{counter}} times.</p>
</template>
Time for some programming :)
Changing the folder structure
-Rename search-box.js to home.
Template.home.helpers({
counter: function () {
return Session.get('counter');
}
});
Template.home.events({
'click button': function () {
// increment the counter when button is clicked
Session.set('counter', Session.get('counter') + 1);
}
});
Time for some programming :)
Changing the folder structure
-Create main.html.
<head>
<title>The amazing Search Box</title>
</head>
Time for some programming :)
Changing the folder structure
-Create app.js.
if (Meteor.isClient) {
// counter starts at 0
Session.setDefault('counter', 0);
}
if (Meteor.isServer) {
Meteor.startup(function () {
// code to run on server at startup
});
}
Time for some programming :)
Changing the folder structure
-Rename search-box.css to home.css.
body {
padding-top: 50px;
}
Everything is
Broken!
Time for some programming :)
Let's add some packages
Navigate to the page
meteor add iron:router
meteor
lib/router.js:
Router.configure({
layoutTemplate : 'layout'
});
https://atmospherejs.com/
Time for some programming :)
Adding route to our home template:
Nice Juan, we are just were we started:)
Router.route("/", {
name: "home"
});
Time for some programming :)
Let's add a search-box:
https://gist.github.com/javflores/5a962facb34d5f585838
<template name="searchBox">
<div class="container">
<div class="row">
<div class="span12">
<form id="simpleSearch" class="form-inline">
<input type="text" name="first-name" id="first-name" class="span5" placeholder="First Name">
<input type="text" name="last-name" id="last-name" class="span5" placeholder="Last Name">
<input type="text" name="yob" id="yob" class="span5" placeholder="Year Of Birth">
<input type="text" name="dob" id="dob" class="span5" placeholder="Date Of Birth">
<button type="submit" class="btn btn-primary" value="Search"><i class="fa fa-search fa-fw"></i> Search!</button>
</form>
</div>
</div>
</div>
</template>
<template name="home">
<h1>Let's do some searches</h1>
{{> searchBox}}
</template>
Time for some programming :)
Almost right, need to add font-awesome
Any idea?
Time for some programming :)
Almost right, need to add font-awesome
https://atmospherejs.com/fortawesome/fontawesome
meteor add fortawesome:fontawesome
Time for some programming :)
Let's read search parameter:
Template.searchBox.events({
'submit form': function(event){
event.preventDefault();
var searchParams = {
firstName: event.target[0].value,
lastName: event.target[1].value,
yob: event.target[2].value,
yod: event.target[3].value
};
}
});
Time for some programming :)
Saving our searches...
Template.searchBox.events({
'submit form': function(event){
event.preventDefault();
var searchParams = {
firstName: event.target[0].value,
lastName: event.target[1].value,
yob: event.target[2].value,
yod: event.target[3].value
};
Searches.saveSearch(searchParams);
}
});
Our first collection: Searches. Let's create one
Time for some programming :)
Searches = new Mongo.Collection("searches");
Searches.saveSearch = function(searchParams) {
return Searches.insert(searchParams);
};
Both on the client and on the server.
That is a security risk!
Solution: publish/subscribe
Time for some programming :)
<template name="home">
<h1>Let's do some searches</h1>
{{> searchBox}}
{{> recentSearches}}
</template>
Let's display our recent searches...
Challenge 1.
Display 10 searches
Time for some programming :)
Let's display our recent searches...
Challenge 1.
<template name="recentSearches">
<div class="container">
<div class="row">
<div class="span12">
{{#each searches}}
<h4><strong>Search: </strong>FirstName: {{firstName}}, LastName: {{lastName}}, YearOfBirth: {{yob}}, YearOfDeath: {{yod}}</h4>
{{/each}}
</div>
</div>
</div>
</template>
Tip 1.
Time for some programming :)
Let's display our recent searches...
Challenge 1.
Template.recentSearches.helpers({
searches: function () {
????
}
});
Tip 2.
Time for some programming :)
Let's display our recent searches...
Open two browsers with the app.
Search in one of then, see how the data is refreshed automatically.
Time for some programming :)
Continuous Development
Time to Deploy
meteor deploy my_app_name.meteor.com
Time for some programming :)
Doing some searches...
To be continued...
Meteor
By Juan Antonio Vicaria
Meteor
- 162