SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
Темы лекции: Обзор веб-фреймворков.
Тренер: Игорь Шкулипа, к.т.н.
Разработка Веб-приложений на платформе
Microsoft .NET Framework.
Занятие 16
http://www.slideshare.net/IgorShkulipa 2
Bootstrap
http://bootstrap-ru.com/
Twitter Bootstrap - это фреймворк для создания современных, кросс-браузерных и
стандартизованных интерфейсов. Продуманная структура кода HTML, JavaScript
и CSS дает вам возможность создавать множество самых разнообразных
элементов интерфейса и сетку сайта.
Основные инструменты Bootstrap:
• Сетки — заранее заданные размеры колонок, которые можно сразу же
использовать, например ширина колонки 90px относится к классу .span2, который
мы можем использовать в CSS описании документа;
• Шаблоны — фиксированный или резиновый шаблон документа;
• Типографика — описания шрифтов, определение некоторых классов для
шрифтов таких как код, цитаты и т.п.;
• Медиа — представляет возможности управления изображениями и видео;
• Таблицы — средства оформления таблиц, вплоть до добавления
функциональности для обеспечения возможности сортировки;
• Формы — классы для оформления не только форм, но и некоторых событий
происходящих с ними;
• Навигация — классы оформления для вкладок, страниц, меню и панелей
инструментов;
• Алерты — оформление диалоговых окон, подсказок и всплывающих окон.
http://www.slideshare.net/IgorShkulipa 3
Компоненты Bootstrap
Все компоненты Bootstrap
http://www.slideshare.net/IgorShkulipa 4
Пример
<!DOCTYPE html>
<html>
<head>
<title>Bootstrap Example</title>
<link href="css/bootstrap.css" rel="stylesheet" media="screen">
</head>
<body>
<h1>Hello, World from Bootstrap</h1>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="js/bootstrap.min.js"></script>
<div class="tabbable">
<ul class="nav nav-tabs">
<li class="active"><a href="#tab1" data-toggle="tab">Tab 1</a></li>
<li><a href="#tab2" data-toggle="tab">Tab 2</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab1">
<p>Hello from Tab 1</p>
</div>
<div class="tab-pane" id="tab2">
<p>Hello from Tab 2</p>
</div>
</div>
</div>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 5
Результат
http://www.slideshare.net/IgorShkulipa 6
AngularJS
AngularJS — JavaScript-фреймворк с открытым исходным кодом.
Предназначен для разработки одностраничных приложений. Его цель
— расширение браузерных приложений на основе MVC шаблона, а
также упрощение тестирования и разработки.
Фреймворк работает с HTML, содержащим дополнительные
пользовательские атрибуты, которые описываются директивами, и
связывает ввод или вывод области страницы с моделью,
представляющей собой обычные переменные JavaScript. Значения
этих переменных задаются вручную или извлекаются из статических
или динамических JSON-данных.
AngularJS спроектирован с убеждением, что декларативное
программирование лучше всего подходит для построения
пользовательских интерфейсов и описания программных
компонентов, в то время как императивное программирование
отлично подходит для описания бизнес-логики. Фреймворк
адаптирует и расширяет традиционный HTML, чтобы обеспечить
двустороннюю привязку данных для динамического контента, что
позволяет автоматически синхронизировать модель и представление.
В результате AngularJS уменьшает роль DOM-манипуляций и улучшает
тестируемость.
http://www.slideshare.net/IgorShkulipa 7
Популярные Angular-директивы
С помощью директив AngularJS можно создавать пользовательские HTML-
теги и атрибуты, чтобы добавить поведение некоторым элементам.
• ng-app - объявляет элемент корневым для приложения.
• ng-bind - автоматически заменяет текст HTML-элемента на значение
переданного выражения.
• ng-model - то же что и ng-bind, только обеспечивает двустороннее
связывание данных. Изменится содержимое элемента, ангуляр изменит
и значение модели. Изменится значение модели, ангуляр изменит
текст внутри элемента.
• ng-class - определяет классы для динамической загрузки.
• ng-controller - определяет JavaScript-контроллер для вычисления
HTML-выражений.
• ng-repeat - создает экземпляр для каждого элемента из коллекции.
http://www.slideshare.net/IgorShkulipa 8
Популярные Angular-директивы
• ng-show и ng-hide - показывает или скрывает элемент в зависимости
от значения логического выражения.
• ng-switch - создает экземпляр шаблона из множества вариантов, в
зависимости от значения выражения.
• ng-view - базовая директива, отвечает за обработку маршрутов,
которые принимают JSON перед отображением шаблонов,
управляемых указанными контроллерами.
http://www.slideshare.net/IgorShkulipa 9
Ссылки
http://angular.ru
http://habrahabr.ru/hub/angularjs/
http://metanit.com/web/angular/
http://www.slideshare.net/IgorShkulipa 10
Пример. Контроллеры (они же модели)
function HelloWorldController($scope) {
$scope.message = "Hello, World from AngularJS";
}
function PeopleController($scope) {
$scope.people = [
{
"name": "Ivan",
"middle":"Ivanovich",
"surname": "Ivanov",
"email":"ivan@ivanov.com"
},
{
"name": "Petr",
"middle": "Petrovich",
"surname": "Petrov",
"email": "petr@petrov.com"
},
{
"name": "Sidor",
"middle": "Sidorovich",
"surname": "Sidorov",
"email": "sidor@sidorov.com"
},
];
}
http://www.slideshare.net/IgorShkulipa 11
Пример. HTML
<!DOCTYPE html>
<html ng-app>
<head>
<title>AngularJS Example</title>
<link href="css/bootstrap.css" rel="stylesheet" media="screen">
<script src="js/angular.min.js"></script>
<script src="js/mc.js"></script>
</head>
<body>
<h1 ng-controller="HelloWorldController">{{message}}</h1>
<ul ng-controller="PeopleController">
<li ng-repeat="per in people">
{{per.name}}&nbsp;{{per.middle}}&nbsp;{{per.surname}}
&nbsp;-&nbsp;<strong>{{per.email}}</strong>
</li>
</ul>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 12
Результат
http://www.slideshare.net/IgorShkulipa 13
BackboneJS
BackboneJS — JavaScript-библиотека, основанная на шаблоне
проектирования Model-View-Presenter (MVP), предназначена для
разработки веб-приложений с поддержкой RESTful JSON интерфейса.
Backbone — очень лёгкая библиотека (упакованная и gzip-сжатая 6.3 Кб),
но для работы необходима библиотека Underscore.js, а для
поддержки REST API и работы с DOM элементами рекомендуется
подключить jQuery-подобную библиотеку: jQuery или Zepto.
Backbone.js создан Джереми Ашкенасом, который известен также как
создатель CoffeeScript.
Проект размещается на GitHub, с доступным аннотированным исходным
кодом, с онлайновыми тестами с примером приложения, со списком
туториалов и списком реальных проектов, которые используют
Backbone. Backbone доступен под лицензией MIT.
http://www.slideshare.net/IgorShkulipa 14
Каталог встроенных событий
• "add" (model, collection, options) — когда модель добавляется в коллекцию.
• "remove" (model, collection, options) — когда модель удаляется из коллекции.
• "reset" (collection, options) — когда всё содержимое коллекции заменяется.
• "sort" (collection, options) — когда коллекция была отсортирована.
• "change" (model, options) — когда атрибут модели меняется.
• "change:[attribute]" (model, value, options) — когда меняется конкретный
атрибут модели.
• "destroy" (model, collection, options) — когда модель уничтожена.
• "request" (model, xhr, options) — когда модель (или коллекция) отправляет
запрос на сервер.
• "sync" (model, resp, options) — когда модель была успешно синхронизирована с
сервером.
http://www.slideshare.net/IgorShkulipa 15
Каталог встроенных событий
• "error" (model, xhr, options) — когда вызов save провалился на
сервере.
• "invalid" (model, error, options) — модель не прошла валидацию на
клиенте.
• "route:[name]" (params) — когда один конкретный роут находит
соответствие.
• "route" (router, route, params) — когда любой из роутов находит
соответствие.
• "all" — это специальное событие срабатывает каждый раз, когда
срабатывает любое событие, передавая имя события первым
аргументом.
http://www.slideshare.net/IgorShkulipa 16
Backbone.Model
Модели содержат как интерактивные данные, так и большую часть
соответствующей логики: конвертации, валидации, вычисленные
свойства и контроль доступа.
Вы расширяете Backbone.Model методами своей предметной области, а
Model предоставляет базовый набор функциональности по управлению
изменениями.
http://www.slideshare.net/IgorShkulipa 17
Ссылки
http://backbonejs.org/
http://backbonejs.ru/
http://habrahabr.ru/post/127049/
https://github.com/kulakowka/Backbone.js-Russian
http://www.slideshare.net/IgorShkulipa 18
Пример. Заголовок
<!DOCTYPE html>
<html>
<head>
<title>BackboneJS Example</title>
<link href="css/bootstrap.css" rel="stylesheet"
media="screen">
<script src="js/jquery-1.9.1.min.js"></script>
<script src="js/underscore.js"></script>
<script src="js/backbone.js"></script>
</head>
<body>
<h1>Hello, World from BackboneJS</h1>
<div id="maindiv">
</div>
http://www.slideshare.net/IgorShkulipa 19
Пример. Шаблон представления
<script type="text/template" id="maintemplate">
<ul>
<% People.each( function(per) { %>
<li>
<%= per.get("name") %>&nbsp;
<%= per.get("middle") %>&nbsp;
<%= per.get("surname") %> -<strong>
<%= per.get("email") %></strong>
</li>
<% }); %>
</ul>
</script>
http://www.slideshare.net/IgorShkulipa 20
Пример. Модель и остальное
<script type="text/javascript">
var Persone = Backbone.Model.extend({
defaults: {
name: "Name",
middle: "Middle",
surname: "Surname",
email: "address@domain.com"
}
});
var PeopleList = Backbone.Collection.extend({
models: Persone
});
var People = new PeopleList([
new Persone({ name: "Ivan", middle: "Ivanovich",
surname: "Ivanov", email: "ivan@ivanov.com" }),
new Persone({ name: "Petr", middle: "Petrovich",
surname: "Petrov", email: "petr@petrov.com" }),
new Persone({ name: "Sidor", middle: "Sidorovich",
surname: "Sidorov", email: "sidor@sidorov.com" })
]);
http://www.slideshare.net/IgorShkulipa 21
Пример. Модель и остальное
var MainView = Backbone.View.extend({
el: "#maindiv",
initialize: function () {
this.render();
},
render: function () {
var templ = _.template($("#maintemplate").html(),
{ People: People.models });
$("#maindiv").html(templ);
return this;
}
});
var mv = new MainView();
</script>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 22
Результат
http://www.slideshare.net/IgorShkulipa 23
KnockoutJS
Knockout использует архитектуру (MVVM) Модель - Представление -
Модель представления.
Элементы страницы, из которых она будет состоять, могут быть
помещены в представление.
Сами данные, которые будут отображаться, могут быть представлены в
модели.
Третий компонент, модель представления, - это по сути состояние
интерфейса в данный момент времени (комбинация данных и
представления с уже применёнными интерактивными элементами).
http://www.slideshare.net/IgorShkulipa 24
Ссылки
http://knockoutjs.com/
https://github.com/knockout/knockout
http://www.slideshare.net/IgorShkulipa 25
Пример. ViewModel
function persone(nam, mid, surn, em) {
this.name = ko.observable(nam);
this.middle = ko.observable(mid);
this.surname = ko.observable(surn);
this.email = ko.observable(em);
this.fullname = ko.pureComputed({
read: function () {
return this.name() + " " +
this.middle() + " " +
this.surname();
},
write: function (value) {
var iFirstSpace = value.indexOf(" ");
var iSecondSpace = value.lastIndexOf(" ");
if ((iFirstSpace > 0)&&(iSecondSpace>0)) {
this.name(value.substring(0, iFirstSpace));
this.middle(value.substring(iFirstSpace+1, iSecondSpace));
this.surname(value.substring(iSecondSpace+1));
}
},
owner: this
});
return this;
}
http://www.slideshare.net/IgorShkulipa 26
Пример. ViewModel
var HelloWorldViewModel = {
message: "Hello, World from KnockoutJS",
people: ko.observableArray([
new persone("Ivan", "Ivanovich", "Ivanov", "ivan@ivanov.com"),
new persone("Petr", "Petrovich", "Petrov", "petr@petrov.com"),
new persone("Sidor", "Sidorovich", "Sidorov", "sidor@sidorov.com")
])
}
http://www.slideshare.net/IgorShkulipa 27
Пример. HTML
<!DOCTYPE html>
<html>
<head>
<title>KnockoutJS Example</title>
<link href="css/bootstrap.css" rel="stylesheet" media="screen">
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="js/knockout-3.2.0.js"></script>
<script type="text/javascript" src="js/mc.js"></script>
</head>
<body>
<h1 data-bind="text:HelloWorldViewModel.message" ></h1>
<table>
<thead>
<tr><th>Name</th><th>Middle</th><th>Surname</th>
<th>E-Mail</th><th>Full Name</th></tr>
</thead>
<tbody data-bind="foreach: HelloWorldViewModel.people">
<tr>
<td><input data-bind="value: name"/></td>
<td><input data-bind="value: middle"/></td>
<td><input data-bind="value: surname"/></td>
<td><input data-bind="value: email"/></td>
<td><input data-bind="value: fullname"/></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
ko.applyBindings(HelloWorldViewModel);
</script>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 28
Результат
http://www.slideshare.net/IgorShkulipa 29
Knockout в MVC проекте
http://knockoutmvc.com/
http://www.slideshare.net/IgorShkulipa 30
KnockoutMVC
http://www.slideshare.net/IgorShkulipa 31
KnockoutMVC
http://www.slideshare.net/IgorShkulipa 32
Пример. Скрипты
@Scripts.Render("~/Scripts/jquery-2.1.1.min.js")
@Scripts.Render("~/Scripts/knockout-3.1.0.js")
@Scripts.Render("~/Scripts/knockout.mapping-latest.js")
@Scripts.Render("~/Scripts/perpetuum.knockout.js")
http://www.slideshare.net/IgorShkulipa 33
Пример. Модель
public class Persone {
public string Name { get; set; }
public string Middle { get; set; }
public string Surname { get; set; }
public string Email { get; set; }
public string FullName {
get {
return Name + " " + Middle + " " + Surname;
}
set {
var iFirstSpace = value.IndexOf(" ");
var iSecondSpace = value.LastIndexOf(" ");
if ((iFirstSpace > 0) && (iSecondSpace > 0))
{
this.Name = value.Substring(0, iFirstSpace);
this.Middle = value.Substring(iFirstSpace + 1,
iSecondSpace);
this.Surname = value.Substring(iSecondSpace + 1);
} } } }
public class HelloWorldViewModel {
public string Message { get; set; }
public List<Persone> People { get; set; }
}
http://www.slideshare.net/IgorShkulipa 34
Пример. Контроллер
public class HomeController : Controller
{
public static HelloWorldViewModel ViewModel = new HelloWorldViewModel
{
Message = "Hello, World from KnockoutMVC",
People =new List<Persone>{
new Persone{Name="Ivan", Middle="Ivanovich",
Surname="Ivanov", Email="ivan@ivanov.com"},
new Persone{Name="Petr", Middle="Petrovich",
Surname="Petrov", Email="petr@petrov.com"},
new Persone{Name="Sidor", Middle="Sidorovich",
Surname="Sidorov", Email="sidor@sidorov.com"}
}};
public ActionResult Index()
{
return View(ViewModel);
}
...
}
http://www.slideshare.net/IgorShkulipa 35
Пример. Представление
@model KnockoutMVC.Controllers.HelloWorldViewModel
@using PerpetuumSoft.Knockout
@{
ViewBag.Title = "KnockoutMVC Example";
}
@{
var ko = Html.CreateKnockoutContext();
}
<h1>@ko.Html.Span(m => m.Message)</h1>
<div>
<table style="width:100%">
<thead>
<tr><th>Name</th><th>Middle</th><th>Surname</th
>
<th>E-Mail</th><th>Full Name</th></tr>
</thead>
http://www.slideshare.net/IgorShkulipa 36
Пример. Представление
<tbody>
@using (var people = ko.Foreach(m => m.People))
{
<tr>
<td style="width:20%">
@people.Html.TextBox(per => per.Name,
new { style = "width:auto" })</td>
<td style="width:20%">
@people.Html.TextBox(per => per.Middle,
new { style = "width:auto" })</td>
<td style="width:20%">
@people.Html.TextBox(per => per.Surname,
new { style = "width:auto" })</td>
<td style="width:20%">
@people.Html.TextBox(per => per.Email,
new { style = "width:auto" })</td>
<td style="width:20%">
@people.Html.TextBox(per => per.FullName,
new { style = "width:auto" })</td>
</tr>
}
</tbody>
</table></div>
@ko.Apply(Model)
http://www.slideshare.net/IgorShkulipa 37
Результат
http://www.slideshare.net/IgorShkulipa 38
NodeJS
Node или Node.js — программная платформа, основанная на движке V8
(транслирующем JavaScript в машинный код), превращающая JavaScript из
узкоспециализированного языка в язык общего назначения.
Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-
вывода через свой API (написанный на C++), подключать другие внешние
библиотеки, написанные на разных языках, обеспечивая вызовы к ним из
JavaScript-кода.
Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но
есть возможность разрабатывать на Node.js и десктопные оконные приложения
(при помощи node-webkit и AppJS для Linux, Windows и Mac OS) и даже
программировать микроконтроллеры (например, tessel и espruino). В основе
Node.js лежит событийно-ориентированное и асинхронное (или реактивное)
программирование с неблокирующим вводом/выводом.
Node разработал Райан Дал (англ. Ryan Dahl) в 2009 году после двух лет
экспериментирования над созданием серверных веб-компонентов. В ходе своих
исследований он пришёл к выводу, что вместо традиционной модели
параллелизма на основе потоков следует обратиться к событийно-
ориентированным системам. Эта модель была выбрана из-за простоты, низких
накладных расходов (по сравнению с идеологией «один поток на каждое
соединение») и быстродействия. Целью Node является предложить «простой
способ построения масштабируемых сетевых серверов».
http://www.slideshare.net/IgorShkulipa 39
Ссылки
http://nodejs.org/
http://www.nodebeginner.ru/
http://www.slideshare.net/IgorShkulipa 40
Пример. Самый простой сервер
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, { “Content-Type”: “text/plain” });
response.end("Hello, World from NodeJS");
}).listen(12345);
http://www.slideshare.net/IgorShkulipa 41
Пример. Сервер немного сложнее
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, { “Content-Type”: “text/html” });
response.write("<!DOCTYPE html><html><head>");
response.write("<title>"+"NodeJS Example"+"</title>");
response.write("</head><body>");
response.write("<h1>"+"Hello, World from NodeJS"+"</h1>");
response.end("</body></html>");
}).listen(12345);
http://www.slideshare.net/IgorShkulipa 42
Пример. Сервер еще немного сложнее
var http = require("http");
var fs = require("fs");
http.createServer(function (request, response) {
var index = fs.readFileSync("./index.html");
response.writeHead(200,
{ “Content-Type”: “text/html” });
response.end(index);
}).listen(12345);
Index.html
<!DOCTYPE html>
<html>
<head>
<title>NodeJS Example</title>
</head>
<body>
<h1>Hello, World from NodeJS</h1>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 43
Пример. Сервер еще чуть-чуть сложнее
var http = require("http");
var url = require("url");
var fs = require("fs");
function Respond(request, response) {
var pathname = url.parse(request.url).pathname;
var index = fs.readFileSync("./" + pathname);
response.writeHead(200, { “Content-Type”: “text/html” });
response.end(index);
}
http.createServer(Respond).listen(12345);
Index.html
<!DOCTYPE html>
<html>
<head>
<title>NodeJS Example</title>
</head>
<body>
<h1>Hello, World from NodeJS</h1>
</body>
</html>
Index2.html
<!DOCTYPE html>
<html>
<head>
<title>NodeJS Example</title>
</head>
<body>
<h1>Hello, World from NodeJS and Index2</h1>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 44
Результат

Mais conteúdo relacionado

Mais procurados

07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASPEdward Galiaskarov
 
Практикум Web программирование
Практикум Web программированиеПрактикум Web программирование
Практикум Web программированиеRauan Ibraikhan
 
Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектамиUnguryan Vitaliy
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...jazzteam
 
Сборник практических задании по Php
Сборник практических задании по PhpСборник практических задании по Php
Сборник практических задании по PhpRauan Ibraikhan
 
Диаграмма компонентов
Диаграмма компонентовДиаграмма компонентов
Диаграмма компонентовDEVTYPE
 
Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектированияITCP Community
 
C++ осень 2012 лекция 8
C++ осень 2012 лекция 8C++ осень 2012 лекция 8
C++ осень 2012 лекция 8Technopark
 
Excel для практиков
Excel для практиковExcel для практиков
Excel для практиковAlexander Babich
 
метод организации репозитория исходного кода
метод организации репозитория исходного кодаметод организации репозитория исходного кода
метод организации репозитория исходного кодаSergii Shmarkatiuk
 
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...Alex V. Petrov
 
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Dmitry Andreev
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовSQALab
 

Mais procurados (20)

МиСПИСиТ (структура)
МиСПИСиТ (структура)МиСПИСиТ (структура)
МиСПИСиТ (структура)
 
07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP
 
Практикум Web программирование
Практикум Web программированиеПрактикум Web программирование
Практикум Web программирование
 
Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектами
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
 
лр4 uml
лр4 umlлр4 uml
лр4 uml
 
Сборник практических задании по Php
Сборник практических задании по PhpСборник практических задании по Php
Сборник практических задании по Php
 
МиСПИСиТ (IDEF)
МиСПИСиТ (IDEF)МиСПИСиТ (IDEF)
МиСПИСиТ (IDEF)
 
Views обзор
Views обзорViews обзор
Views обзор
 
Диаграмма компонентов
Диаграмма компонентовДиаграмма компонентов
Диаграмма компонентов
 
Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектирования
 
C++ осень 2012 лекция 8
C++ осень 2012 лекция 8C++ осень 2012 лекция 8
C++ осень 2012 лекция 8
 
Excel для практиков
Excel для практиковExcel для практиков
Excel для практиков
 
Методоллогии Agile
Методоллогии AgileМетодоллогии Agile
Методоллогии Agile
 
метод организации репозитория исходного кода
метод организации репозитория исходного кодаметод организации репозитория исходного кода
метод организации репозитория исходного кода
 
МиСПИСиТ (тестирование и отладка)
МиСПИСиТ (тестирование и отладка)МиСПИСиТ (тестирование и отладка)
МиСПИСиТ (тестирование и отладка)
 
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
 
Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
 
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 

Destaque

Challenge Passport-sm
Challenge Passport-smChallenge Passport-sm
Challenge Passport-smLewis Pitzer
 
amazing animals
amazing animalsamazing animals
amazing animalssosome
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.Igor Shkulipa
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.Igor Shkulipa
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.Igor Shkulipa
 
Capítulo iii correcion
Capítulo iii correcion Capítulo iii correcion
Capítulo iii correcion Ida Morán
 
Vijay bhosekar published article organic agriculture
Vijay bhosekar  published article  organic agricultureVijay bhosekar  published article  organic agriculture
Vijay bhosekar published article organic agriculturevijay bhosekar
 
Production diary 8
Production diary 8Production diary 8
Production diary 8Laila Jaleel
 
PPC Masters February 2015
PPC Masters February 2015PPC Masters February 2015
PPC Masters February 2015LucaSenatoreGb
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.Igor Shkulipa
 
Laura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaila Jaleel
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.Igor Shkulipa
 
InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015Lech Wilczynski
 

Destaque (19)

PRES Eve's Dream
PRES Eve's DreamPRES Eve's Dream
PRES Eve's Dream
 
Challenge Passport-sm
Challenge Passport-smChallenge Passport-sm
Challenge Passport-sm
 
amazing animals
amazing animalsamazing animals
amazing animals
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.
 
Capítulo iii correcion
Capítulo iii correcion Capítulo iii correcion
Capítulo iii correcion
 
Vijay bhosekar published article organic agriculture
Vijay bhosekar  published article  organic agricultureVijay bhosekar  published article  organic agriculture
Vijay bhosekar published article organic agriculture
 
Production diary 8
Production diary 8Production diary 8
Production diary 8
 
PPC Masters February 2015
PPC Masters February 2015PPC Masters February 2015
PPC Masters February 2015
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
Nowhere But Niigata
Nowhere But NiigataNowhere But Niigata
Nowhere But Niigata
 
Laura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaura mulvey’s male gaze theory
Laura mulvey’s male gaze theory
 
objetos
objetosobjetos
objetos
 
MME 2016
MME 2016MME 2016
MME 2016
 
InPay OpenReaktor
InPay OpenReaktorInPay OpenReaktor
InPay OpenReaktor
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015
 

Semelhante a C# Web. Занятие 16.

ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
 
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворкиRoman Brovko
 
Лекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЯковенко Кирилл
 
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXBТехнология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXBFedor Malyshkin
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.Igor Shkulipa
 
История развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другиеИстория развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другиеlugnsk
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Dreamwever cs3
Dreamwever cs3Dreamwever cs3
Dreamwever cs3JIuc
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
Разработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA Consulting
Разработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA ConsultingРазработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA Consulting
Разработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA ConsultingYandex
 
20160323 Пример бизнес-приложения контроля качества в розничной торговле
20160323 Пример бизнес-приложения контроля качества в розничной торговле20160323 Пример бизнес-приложения контроля качества в розничной торговле
20160323 Пример бизнес-приложения контроля качества в розничной торговлеAndrew Sovtsov
 
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14MoscowJS
 
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2SeleniumAgile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2Seleniumjazzteam
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрийsolit
 
Проектирование пользовательских интерфейсов в компании EPAM Systems
Проектирование пользовательских интерфейсов в компании EPAM SystemsПроектирование пользовательских интерфейсов в компании EPAM Systems
Проектирование пользовательских интерфейсов в компании EPAM SystemsSQALab
 

Semelhante a C# Web. Занятие 16. (20)

Django
DjangoDjango
Django
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки
 
Лекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-framework
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXBТехнология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
 
История развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другиеИстория развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другие
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Dreamwever cs3
Dreamwever cs3Dreamwever cs3
Dreamwever cs3
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
Grails & Groovy
Grails & GroovyGrails & Groovy
Grails & Groovy
 
Разработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA Consulting
Разработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA ConsultingРазработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA Consulting
Разработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA Consulting
 
20160323 Пример бизнес-приложения контроля качества в розничной торговле
20160323 Пример бизнес-приложения контроля качества в розничной торговле20160323 Пример бизнес-приложения контроля качества в розничной торговле
20160323 Пример бизнес-приложения контроля качества в розничной торговле
 
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
 
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2SeleniumAgile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
 
Проектирование пользовательских интерфейсов в компании EPAM Systems
Проектирование пользовательских интерфейсов в компании EPAM SystemsПроектирование пользовательских интерфейсов в компании EPAM Systems
Проектирование пользовательских интерфейсов в компании EPAM Systems
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 

Mais de Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03. Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.Igor Shkulipa
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.Igor Shkulipa
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.Igor Shkulipa
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.Igor Shkulipa
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.Igor Shkulipa
 
C# Web. Занятие 06.
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.Igor Shkulipa
 

Mais de Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.
 
C# Web. Занятие 06.
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.
 

C# Web. Занятие 16.

  • 1. Темы лекции: Обзор веб-фреймворков. Тренер: Игорь Шкулипа, к.т.н. Разработка Веб-приложений на платформе Microsoft .NET Framework. Занятие 16
  • 2. http://www.slideshare.net/IgorShkulipa 2 Bootstrap http://bootstrap-ru.com/ Twitter Bootstrap - это фреймворк для создания современных, кросс-браузерных и стандартизованных интерфейсов. Продуманная структура кода HTML, JavaScript и CSS дает вам возможность создавать множество самых разнообразных элементов интерфейса и сетку сайта. Основные инструменты Bootstrap: • Сетки — заранее заданные размеры колонок, которые можно сразу же использовать, например ширина колонки 90px относится к классу .span2, который мы можем использовать в CSS описании документа; • Шаблоны — фиксированный или резиновый шаблон документа; • Типографика — описания шрифтов, определение некоторых классов для шрифтов таких как код, цитаты и т.п.; • Медиа — представляет возможности управления изображениями и видео; • Таблицы — средства оформления таблиц, вплоть до добавления функциональности для обеспечения возможности сортировки; • Формы — классы для оформления не только форм, но и некоторых событий происходящих с ними; • Навигация — классы оформления для вкладок, страниц, меню и панелей инструментов; • Алерты — оформление диалоговых окон, подсказок и всплывающих окон.
  • 4. http://www.slideshare.net/IgorShkulipa 4 Пример <!DOCTYPE html> <html> <head> <title>Bootstrap Example</title> <link href="css/bootstrap.css" rel="stylesheet" media="screen"> </head> <body> <h1>Hello, World from Bootstrap</h1> <script src="http://code.jquery.com/jquery-latest.js"></script> <script src="js/bootstrap.min.js"></script> <div class="tabbable"> <ul class="nav nav-tabs"> <li class="active"><a href="#tab1" data-toggle="tab">Tab 1</a></li> <li><a href="#tab2" data-toggle="tab">Tab 2</a></li> </ul> <div class="tab-content"> <div class="tab-pane active" id="tab1"> <p>Hello from Tab 1</p> </div> <div class="tab-pane" id="tab2"> <p>Hello from Tab 2</p> </div> </div> </div> </body> </html>
  • 6. http://www.slideshare.net/IgorShkulipa 6 AngularJS AngularJS — JavaScript-фреймворк с открытым исходным кодом. Предназначен для разработки одностраничных приложений. Его цель — расширение браузерных приложений на основе MVC шаблона, а также упрощение тестирования и разработки. Фреймворк работает с HTML, содержащим дополнительные пользовательские атрибуты, которые описываются директивами, и связывает ввод или вывод области страницы с моделью, представляющей собой обычные переменные JavaScript. Значения этих переменных задаются вручную или извлекаются из статических или динамических JSON-данных. AngularJS спроектирован с убеждением, что декларативное программирование лучше всего подходит для построения пользовательских интерфейсов и описания программных компонентов, в то время как императивное программирование отлично подходит для описания бизнес-логики. Фреймворк адаптирует и расширяет традиционный HTML, чтобы обеспечить двустороннюю привязку данных для динамического контента, что позволяет автоматически синхронизировать модель и представление. В результате AngularJS уменьшает роль DOM-манипуляций и улучшает тестируемость.
  • 7. http://www.slideshare.net/IgorShkulipa 7 Популярные Angular-директивы С помощью директив AngularJS можно создавать пользовательские HTML- теги и атрибуты, чтобы добавить поведение некоторым элементам. • ng-app - объявляет элемент корневым для приложения. • ng-bind - автоматически заменяет текст HTML-элемента на значение переданного выражения. • ng-model - то же что и ng-bind, только обеспечивает двустороннее связывание данных. Изменится содержимое элемента, ангуляр изменит и значение модели. Изменится значение модели, ангуляр изменит текст внутри элемента. • ng-class - определяет классы для динамической загрузки. • ng-controller - определяет JavaScript-контроллер для вычисления HTML-выражений. • ng-repeat - создает экземпляр для каждого элемента из коллекции.
  • 8. http://www.slideshare.net/IgorShkulipa 8 Популярные Angular-директивы • ng-show и ng-hide - показывает или скрывает элемент в зависимости от значения логического выражения. • ng-switch - создает экземпляр шаблона из множества вариантов, в зависимости от значения выражения. • ng-view - базовая директива, отвечает за обработку маршрутов, которые принимают JSON перед отображением шаблонов, управляемых указанными контроллерами.
  • 10. http://www.slideshare.net/IgorShkulipa 10 Пример. Контроллеры (они же модели) function HelloWorldController($scope) { $scope.message = "Hello, World from AngularJS"; } function PeopleController($scope) { $scope.people = [ { "name": "Ivan", "middle":"Ivanovich", "surname": "Ivanov", "email":"ivan@ivanov.com" }, { "name": "Petr", "middle": "Petrovich", "surname": "Petrov", "email": "petr@petrov.com" }, { "name": "Sidor", "middle": "Sidorovich", "surname": "Sidorov", "email": "sidor@sidorov.com" }, ]; }
  • 11. http://www.slideshare.net/IgorShkulipa 11 Пример. HTML <!DOCTYPE html> <html ng-app> <head> <title>AngularJS Example</title> <link href="css/bootstrap.css" rel="stylesheet" media="screen"> <script src="js/angular.min.js"></script> <script src="js/mc.js"></script> </head> <body> <h1 ng-controller="HelloWorldController">{{message}}</h1> <ul ng-controller="PeopleController"> <li ng-repeat="per in people"> {{per.name}}&nbsp;{{per.middle}}&nbsp;{{per.surname}} &nbsp;-&nbsp;<strong>{{per.email}}</strong> </li> </ul> </body> </html>
  • 13. http://www.slideshare.net/IgorShkulipa 13 BackboneJS BackboneJS — JavaScript-библиотека, основанная на шаблоне проектирования Model-View-Presenter (MVP), предназначена для разработки веб-приложений с поддержкой RESTful JSON интерфейса. Backbone — очень лёгкая библиотека (упакованная и gzip-сжатая 6.3 Кб), но для работы необходима библиотека Underscore.js, а для поддержки REST API и работы с DOM элементами рекомендуется подключить jQuery-подобную библиотеку: jQuery или Zepto. Backbone.js создан Джереми Ашкенасом, который известен также как создатель CoffeeScript. Проект размещается на GitHub, с доступным аннотированным исходным кодом, с онлайновыми тестами с примером приложения, со списком туториалов и списком реальных проектов, которые используют Backbone. Backbone доступен под лицензией MIT.
  • 14. http://www.slideshare.net/IgorShkulipa 14 Каталог встроенных событий • "add" (model, collection, options) — когда модель добавляется в коллекцию. • "remove" (model, collection, options) — когда модель удаляется из коллекции. • "reset" (collection, options) — когда всё содержимое коллекции заменяется. • "sort" (collection, options) — когда коллекция была отсортирована. • "change" (model, options) — когда атрибут модели меняется. • "change:[attribute]" (model, value, options) — когда меняется конкретный атрибут модели. • "destroy" (model, collection, options) — когда модель уничтожена. • "request" (model, xhr, options) — когда модель (или коллекция) отправляет запрос на сервер. • "sync" (model, resp, options) — когда модель была успешно синхронизирована с сервером.
  • 15. http://www.slideshare.net/IgorShkulipa 15 Каталог встроенных событий • "error" (model, xhr, options) — когда вызов save провалился на сервере. • "invalid" (model, error, options) — модель не прошла валидацию на клиенте. • "route:[name]" (params) — когда один конкретный роут находит соответствие. • "route" (router, route, params) — когда любой из роутов находит соответствие. • "all" — это специальное событие срабатывает каждый раз, когда срабатывает любое событие, передавая имя события первым аргументом.
  • 16. http://www.slideshare.net/IgorShkulipa 16 Backbone.Model Модели содержат как интерактивные данные, так и большую часть соответствующей логики: конвертации, валидации, вычисленные свойства и контроль доступа. Вы расширяете Backbone.Model методами своей предметной области, а Model предоставляет базовый набор функциональности по управлению изменениями.
  • 18. http://www.slideshare.net/IgorShkulipa 18 Пример. Заголовок <!DOCTYPE html> <html> <head> <title>BackboneJS Example</title> <link href="css/bootstrap.css" rel="stylesheet" media="screen"> <script src="js/jquery-1.9.1.min.js"></script> <script src="js/underscore.js"></script> <script src="js/backbone.js"></script> </head> <body> <h1>Hello, World from BackboneJS</h1> <div id="maindiv"> </div>
  • 19. http://www.slideshare.net/IgorShkulipa 19 Пример. Шаблон представления <script type="text/template" id="maintemplate"> <ul> <% People.each( function(per) { %> <li> <%= per.get("name") %>&nbsp; <%= per.get("middle") %>&nbsp; <%= per.get("surname") %> -<strong> <%= per.get("email") %></strong> </li> <% }); %> </ul> </script>
  • 20. http://www.slideshare.net/IgorShkulipa 20 Пример. Модель и остальное <script type="text/javascript"> var Persone = Backbone.Model.extend({ defaults: { name: "Name", middle: "Middle", surname: "Surname", email: "address@domain.com" } }); var PeopleList = Backbone.Collection.extend({ models: Persone }); var People = new PeopleList([ new Persone({ name: "Ivan", middle: "Ivanovich", surname: "Ivanov", email: "ivan@ivanov.com" }), new Persone({ name: "Petr", middle: "Petrovich", surname: "Petrov", email: "petr@petrov.com" }), new Persone({ name: "Sidor", middle: "Sidorovich", surname: "Sidorov", email: "sidor@sidorov.com" }) ]);
  • 21. http://www.slideshare.net/IgorShkulipa 21 Пример. Модель и остальное var MainView = Backbone.View.extend({ el: "#maindiv", initialize: function () { this.render(); }, render: function () { var templ = _.template($("#maintemplate").html(), { People: People.models }); $("#maindiv").html(templ); return this; } }); var mv = new MainView(); </script> </body> </html>
  • 23. http://www.slideshare.net/IgorShkulipa 23 KnockoutJS Knockout использует архитектуру (MVVM) Модель - Представление - Модель представления. Элементы страницы, из которых она будет состоять, могут быть помещены в представление. Сами данные, которые будут отображаться, могут быть представлены в модели. Третий компонент, модель представления, - это по сути состояние интерфейса в данный момент времени (комбинация данных и представления с уже применёнными интерактивными элементами).
  • 25. http://www.slideshare.net/IgorShkulipa 25 Пример. ViewModel function persone(nam, mid, surn, em) { this.name = ko.observable(nam); this.middle = ko.observable(mid); this.surname = ko.observable(surn); this.email = ko.observable(em); this.fullname = ko.pureComputed({ read: function () { return this.name() + " " + this.middle() + " " + this.surname(); }, write: function (value) { var iFirstSpace = value.indexOf(" "); var iSecondSpace = value.lastIndexOf(" "); if ((iFirstSpace > 0)&&(iSecondSpace>0)) { this.name(value.substring(0, iFirstSpace)); this.middle(value.substring(iFirstSpace+1, iSecondSpace)); this.surname(value.substring(iSecondSpace+1)); } }, owner: this }); return this; }
  • 26. http://www.slideshare.net/IgorShkulipa 26 Пример. ViewModel var HelloWorldViewModel = { message: "Hello, World from KnockoutJS", people: ko.observableArray([ new persone("Ivan", "Ivanovich", "Ivanov", "ivan@ivanov.com"), new persone("Petr", "Petrovich", "Petrov", "petr@petrov.com"), new persone("Sidor", "Sidorovich", "Sidorov", "sidor@sidorov.com") ]) }
  • 27. http://www.slideshare.net/IgorShkulipa 27 Пример. HTML <!DOCTYPE html> <html> <head> <title>KnockoutJS Example</title> <link href="css/bootstrap.css" rel="stylesheet" media="screen"> <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script> <script type="text/javascript" src="js/knockout-3.2.0.js"></script> <script type="text/javascript" src="js/mc.js"></script> </head> <body> <h1 data-bind="text:HelloWorldViewModel.message" ></h1> <table> <thead> <tr><th>Name</th><th>Middle</th><th>Surname</th> <th>E-Mail</th><th>Full Name</th></tr> </thead> <tbody data-bind="foreach: HelloWorldViewModel.people"> <tr> <td><input data-bind="value: name"/></td> <td><input data-bind="value: middle"/></td> <td><input data-bind="value: surname"/></td> <td><input data-bind="value: email"/></td> <td><input data-bind="value: fullname"/></td> </tr> </tbody> </table> <script type="text/javascript"> ko.applyBindings(HelloWorldViewModel); </script> </body> </html>
  • 29. http://www.slideshare.net/IgorShkulipa 29 Knockout в MVC проекте http://knockoutmvc.com/
  • 33. http://www.slideshare.net/IgorShkulipa 33 Пример. Модель public class Persone { public string Name { get; set; } public string Middle { get; set; } public string Surname { get; set; } public string Email { get; set; } public string FullName { get { return Name + " " + Middle + " " + Surname; } set { var iFirstSpace = value.IndexOf(" "); var iSecondSpace = value.LastIndexOf(" "); if ((iFirstSpace > 0) && (iSecondSpace > 0)) { this.Name = value.Substring(0, iFirstSpace); this.Middle = value.Substring(iFirstSpace + 1, iSecondSpace); this.Surname = value.Substring(iSecondSpace + 1); } } } } public class HelloWorldViewModel { public string Message { get; set; } public List<Persone> People { get; set; } }
  • 34. http://www.slideshare.net/IgorShkulipa 34 Пример. Контроллер public class HomeController : Controller { public static HelloWorldViewModel ViewModel = new HelloWorldViewModel { Message = "Hello, World from KnockoutMVC", People =new List<Persone>{ new Persone{Name="Ivan", Middle="Ivanovich", Surname="Ivanov", Email="ivan@ivanov.com"}, new Persone{Name="Petr", Middle="Petrovich", Surname="Petrov", Email="petr@petrov.com"}, new Persone{Name="Sidor", Middle="Sidorovich", Surname="Sidorov", Email="sidor@sidorov.com"} }}; public ActionResult Index() { return View(ViewModel); } ... }
  • 35. http://www.slideshare.net/IgorShkulipa 35 Пример. Представление @model KnockoutMVC.Controllers.HelloWorldViewModel @using PerpetuumSoft.Knockout @{ ViewBag.Title = "KnockoutMVC Example"; } @{ var ko = Html.CreateKnockoutContext(); } <h1>@ko.Html.Span(m => m.Message)</h1> <div> <table style="width:100%"> <thead> <tr><th>Name</th><th>Middle</th><th>Surname</th > <th>E-Mail</th><th>Full Name</th></tr> </thead>
  • 36. http://www.slideshare.net/IgorShkulipa 36 Пример. Представление <tbody> @using (var people = ko.Foreach(m => m.People)) { <tr> <td style="width:20%"> @people.Html.TextBox(per => per.Name, new { style = "width:auto" })</td> <td style="width:20%"> @people.Html.TextBox(per => per.Middle, new { style = "width:auto" })</td> <td style="width:20%"> @people.Html.TextBox(per => per.Surname, new { style = "width:auto" })</td> <td style="width:20%"> @people.Html.TextBox(per => per.Email, new { style = "width:auto" })</td> <td style="width:20%"> @people.Html.TextBox(per => per.FullName, new { style = "width:auto" })</td> </tr> } </tbody> </table></div> @ko.Apply(Model)
  • 38. http://www.slideshare.net/IgorShkulipa 38 NodeJS Node или Node.js — программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода- вывода через свой API (написанный на C++), подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но есть возможность разрабатывать на Node.js и десктопные оконные приложения (при помощи node-webkit и AppJS для Linux, Windows и Mac OS) и даже программировать микроконтроллеры (например, tessel и espruino). В основе Node.js лежит событийно-ориентированное и асинхронное (или реактивное) программирование с неблокирующим вводом/выводом. Node разработал Райан Дал (англ. Ryan Dahl) в 2009 году после двух лет экспериментирования над созданием серверных веб-компонентов. В ходе своих исследований он пришёл к выводу, что вместо традиционной модели параллелизма на основе потоков следует обратиться к событийно- ориентированным системам. Эта модель была выбрана из-за простоты, низких накладных расходов (по сравнению с идеологией «один поток на каждое соединение») и быстродействия. Целью Node является предложить «простой способ построения масштабируемых сетевых серверов».
  • 40. http://www.slideshare.net/IgorShkulipa 40 Пример. Самый простой сервер var http = require("http"); http.createServer(function (request, response) { response.writeHead(200, { “Content-Type”: “text/plain” }); response.end("Hello, World from NodeJS"); }).listen(12345);
  • 41. http://www.slideshare.net/IgorShkulipa 41 Пример. Сервер немного сложнее var http = require("http"); http.createServer(function (request, response) { response.writeHead(200, { “Content-Type”: “text/html” }); response.write("<!DOCTYPE html><html><head>"); response.write("<title>"+"NodeJS Example"+"</title>"); response.write("</head><body>"); response.write("<h1>"+"Hello, World from NodeJS"+"</h1>"); response.end("</body></html>"); }).listen(12345);
  • 42. http://www.slideshare.net/IgorShkulipa 42 Пример. Сервер еще немного сложнее var http = require("http"); var fs = require("fs"); http.createServer(function (request, response) { var index = fs.readFileSync("./index.html"); response.writeHead(200, { “Content-Type”: “text/html” }); response.end(index); }).listen(12345); Index.html <!DOCTYPE html> <html> <head> <title>NodeJS Example</title> </head> <body> <h1>Hello, World from NodeJS</h1> </body> </html>
  • 43. http://www.slideshare.net/IgorShkulipa 43 Пример. Сервер еще чуть-чуть сложнее var http = require("http"); var url = require("url"); var fs = require("fs"); function Respond(request, response) { var pathname = url.parse(request.url).pathname; var index = fs.readFileSync("./" + pathname); response.writeHead(200, { “Content-Type”: “text/html” }); response.end(index); } http.createServer(Respond).listen(12345); Index.html <!DOCTYPE html> <html> <head> <title>NodeJS Example</title> </head> <body> <h1>Hello, World from NodeJS</h1> </body> </html> Index2.html <!DOCTYPE html> <html> <head> <title>NodeJS Example</title> </head> <body> <h1>Hello, World from NodeJS and Index2</h1> </body> </html>