рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдмрдирд╛рдпрд╛ рдерд╛ред рдпрд╣ рдмрд┐рдВрджреБ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - HTML рднрд╛рд╖рд╛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рдХрд┐ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд┐рдирд╛ рд╕рд░рд▓ рдФрд░ рдирд┐рдпрдорд┐рдд рдЪреАрдЬреЗрдВ рд▓рд┐рдЦ рд╕рдХреЗрдВ: рдлреЙрд░реНрдо рдХреЛ json рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдмрдорд┐рдЯ рдХрд░рдирд╛, HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреГрд╖реНрда рдкрд░ рд▓реЛрдб рдХрд░рдирд╛ (рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ HTML рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рдкреНрд░рдгрд╛рд▓реА http / s рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рдЯрд░реНрдмрд╛рдЗрди ( рд╣рд╛рдп RoR рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП), ajax рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рд░рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯред

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ EHTML рдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд HTML рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдпрд╣ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рдХреБрдЦреНрдпрд╛рдд рд╡рд┐рдЪрд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ ред рдпрд╣ рдЬреАрдердм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ , рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдкреНрд░рд▓реЗрдЦрди рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЬрд╛рдПрдЧрд╛ред
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрдиреЗрдХреНрд╢рди
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рддреЛ npm рдпрд╛ cli рдЯреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ HTML рдкреГрд╖реНрда рдЬрд╣рд╛рдВ рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ :
<head>
<script src="/../js/ehtml.bundle.min.js" type="text/javascript"></script>
</head>
рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рдгрд╛рд▓реА
рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ - рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рд╕реЗ рдПрдХ HTML рдкреГрд╖реНрда рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<script src="/../js/ehtml.bundle.min.js" type="text/javascript"></script>
</head>
<body class="main">
<div class="articles">
<e-html data-src="/../html/first.html"></e-html>
<e-html data-src="/../html/second.html"></e-html>
<e-html data-src="/../html/third.html"></e-html>
</div>
</body>
</html>
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ e-html
рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдПрдХрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрддреА рд╣реИ data-src
, рдЬрд╣рд╛рдВ рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреГрд╖реНрда рдХрд╛ HTML рднрд╛рдЧ рдХрд╣рд╛рдБ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЧрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, first.html
рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
<div class="article">
</div>
рдлрд┐рд░ рдЕрдВрдд рдореЗрдВ рд╣рдорд╛рд░реЗ рдкреЗрдЬ рдХреЛ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<script src="/../js/ehtml.bundle.min.js" type="text/javascript"></script>
</head>
<body class="main">
<div class="articles">
<div class="article">
</div>
<div class="article">
</div>
<div class="article">
</div>
</div>
</body>
</html>
рдпрд╣реА рд╣реИ, рдЯреИрдЧ e-html
рдХреЛ рдЙрд╕ HTML рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ рд╣рдордиреЗ data-src
рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ ред
<template/>
. . e-wrapper
, . <template/>
is="e-wrapper"
- . :
<div class="base">
<p>
Header content
</p>
<p id="dynamic-content">
<span>Default content</span>
</p>
<p>
Footer content
</p>
</div>
, :
<body class="main">
<template
is="e-wrapper"
data-src="/../html/wrapper.html"
data-where-to-place="#dynamic-content"
data-how-to-place="instead">
<p>
Variation of content
</p>
</template>
</body>
, :
<div class="base">
<p>
Header content
</p>
<p>
Variation of content
</p>
<p>
Footer content
</p>
</div>
data-src
HTML , . data-where-to-place
, e-wrapper
. data-how-to-place
. : instead
( , data-where-to-place
), before
( ) after
( ). , e-html
e-wrapper
html . http , , тАФ .
ajax
, json :
/../album/{title}
title = 'Humbug'
{
"title": "Humbug",
"artist": "Arctic Monkeys",
"type": "studio album",
"releaseDate": "19 August 2009",
"genre": "psychedelic rock, hard rock, stoner rock, desert rock",
"length": "39:20",
"label": "Domino",
"producer": "James Ford, Joshua Homme"
}
is="e-json"
, HTML:
<template is="e-json" data-src="/../album/Humbug" data-object-name="albumResponse">
<div data-text="Title: ${albumResponse.body.title}"></div>
<div data-text="Artist: ${albumResponse.body.artist}"></div>
<div data-text="Type: ${albumResponse.body.type}"></div>
<div data-text="Release date: ${albumResponse.body.releaseDate}"></div>
<div data-text="Genre: ${albumResponse.body.genre}"></div>
<div data-text="Length: ${albumResponse.body.length}"></div>
<div data-text="Label: ${albumResponse.body.label}"></div>
<div data-text="Producer: ${albumResponse.body.producer}"></div>
</template>
data-src
, json , data-object-name
тАФ , http : body
, headers
statusCode
. data-text
, e-json
.
. , :
title = 'Humbug'
{
"title": "Humbug",
"artist": "Arctic Monkeys",
"songs": [
{ "title": "My Propeller", "length": "3:27" },
{ "title": "Crying Lightning", "length": "3:43" },
{ "title": "Dangerous Animals", "length": "3:30" },
{ "title": "Secret Door", "length": "3:43" },
{ "title": "Potion Approaching", "length": "3:32" },
{ "title": "Fire and the Thud", "length": "3:57" },
{ "title": "Cornerstone", "length": "3:18" },
{ "title": "Dance Little Liar", "length": "4:43" },
{ "title": "Pretty Visitors", "length": "3:40" },
{ "title": "The Jeweller's Hands", "length": "5:42" }
]
}
e-for-each
:
<template is="e-json" data-src="/../album/Humbug" data-object-name="albumResponse">
<div data-text="Title: ${albumResponse.body.title}"></div>
<div data-text="Artist: ${albumResponse.body.artist}"></div>
<div><b data-text="${albumResponse.body.songs.length} songs:"></b></div>
<template
is="e-for-each"
data-list-to-iterate="${albumResponse.body.songs}"
data-item-name="song">
<div class="song-box">
<div data-text="No. ${song.index}/${album.songs.length}"></div>
<div data-text="Title: ${song.title}"></div>
<div data-text="Length: ${song.length}"></div>
</div>
</template>
</template>
data-list-to-iterate
, . data-item-name
, e-for-each
.
e-for-each
e-if
:
<template is="e-json" data-src="/../album/Humbug" data-object-name="albumResponse">
<div data-text="Title: ${albumResponse.body.title}"></div>
<div data-text="Artist: ${albumResponse.body.artist}"></div>
<div><b data-text="${albumResponse.body.songs.length} songs:"></b></div>
<template is="e-for-each"
data-list-to-iterate="${albumResponse.body.songs}"
data-item-name="song">
<template
is="e-if"
data-condition-to-display="${(song.length.split(':')[0] * 60 + song.length.split(':')[1] * 1) <= 210}"
>
<div class="song-box">
<div data-text="No. ${song.index}/${album.songs.length}"></div>
<div data-text="Title: ${song.title}"></div>
<div data-text="Length: ${song.length}"></div>
</div>
</template>
</template>
</template>
data-condition-to-display
e-if
, .
тАФ . json , e-form
, .
, / :
/artist/{name}/albums/add
name = 'Arctic Monkeys'
POST
Example of expected request body: {
"title": "Humbug",
"type": "studio album",
"releaseDate": "19 August 2009",
"genre": ["psychedelic rock", "hard rock", "stoner rock", "desert rock"],
"length": "39:20",
"label": "Domino",
"producer": "James Ford, Joshua Homme"
}
, :
<e-form>
Title:
<input type="text" name="title">
Type:
<input type="radio" name="type" value="studio album" checked>
<label for="one">One</label>
<input type="radio" name="type" value="live album" checked>
<label for="one">One</label>
Release date:
<input type="date" name="releaseDate">
Genre:
<input type="checkbox" name="genre" value="psychedelic rock">
<input type="checkbox" name="genre" value="hard rock">
<input type="checkbox" name="genre" value="stoner rock">
<input type="checkbox" name="genre" value="desert rock">
Total length:
<input type="time" name="totalLength">
Producer:
<input type="text" name="producer">
<button
id="send"
data-request-url="/artist/Arctic_Monkeys/albums/add"
data-request-method="POST"
data-request-headers="{}"
data-ajax-icon="#ajax-icon"
data-response-name="savedAlbum"
onclick="this.form.submit(this)"
data-actions-on-response="
logToConsole('response: ', '${savedAlbum}');
"
/>
<img id="ajax-icon" src="/../images/ajax-loader.gif"/>
</e-form>
, , , . , , . ajax , . , тАФ . , . .
рдпрджрд┐ рдЖрдк рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдмрд╕ рдХреБрдЫ рдФрд░ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ README рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рддрддреНрд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдЖрдк рдПрдХ рд╡реАрдбрд┐рдпреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ EHTML рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреНрд▓реЙрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд┐рдЦрддрд╛ рд╣реВрдБред
рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╡рд╛рд▓ рдЙрдардиреЗ рдкрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред рдФрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рд╢рд▓рдЬрдо рдХрд╛ рд▓рд┐рдВрдХ ред