SlideShare a Scribd company logo
1 of 62
Создание ASP.NET приложений при помощиAJAX, JQueryиVisual Studio 2010 Денис РезникDigital Cloud Technologies
Модель работы Запрос-Ответ
Работа без перезагрузки страницы
Как это работает CLIENT Business Logic Application Data DOM, JavaScript, CSS, XML, JSON, etc. XML HTTP  Request Object TRANSPORT HTTP SERVER Web Service C#, VB.NET, ASPX, XML, SQL, etc. Application Data Business Logic
AJAX functioncreateRequestObject(){    if(window.XMLHttpRequest){    try{    returnnewXMLHttpRequest();    }catch(e){}    }     elseif(window.ActiveXObject){    try{   returnnewActiveXObject('Msxml2.XMLHTTP');    }catch(e){    try{    returnnewActiveXObject('Microsoft.XMLHTTP');    }catch(e){}    }    }     returnnull;}
Ajax frameworks
ASP.NET AJAX
Составные части ASP.NET AJAX
Update Panel Самая популярная штука Частичный рендеринг страницы Автоматическое преобразованиепостбековв асинхронные колбеки Автоматическое обновление контента при помощи результатов колбека Не нужно никаких знанийJavaScript илиXmlHttpRequest Высокоуровневая надстройка над XmlHttpRequest Преимущества: Крайне просто в использовании Недостатки: Менее эффективено чем класическийAJAX
Update Panel Browser submits HTTP request to server 1 Browser Web Server Server responds with content; browser renders that content 2 Browser submits async XML- HTTP request to server; UI remains responsive; page doesn't flash 3 XML-HTTP request completes; JavaScript refreshes portion of page affected by response 4
AJAX Toolkit Самый популярный проект на CodePlex > 25 000 скачиваний каждую неделю Легко интегрируется в Visual Studio 2010 Идеально подходит для Web Forms проектов
AJAX и SEO
AJAX и SEO AJAX – плохо для SEO Поисковые роботы любят чистый HTML Убедитесь, что у вас есть URL для каждой "страницы", которую вы хотите показать роботам и желаете, чтобы она была проиндексирована Загрузите часть контента с ключевыми словами не динамически Разделы меню, ссылки и другие важные структурные аспекты сайта должны работать без AJAX и/или JavaScript
Индексация AJAX контента
AJAX CDN CDN (Content Delivery Network) — географически распределённая сетевая инфраструктура, позволяющая оптимизировать доставку контента конечным пользователям
AJAX CDN
Использование AJAX CDN Подгрузка скриптов cCDN
AJAXLibrary Client Side is dead. Почему? Потому чтоjQuery
jQuery
Почему jQueryэто круто? Легковесный и быстрый фреймворк Огромное комьюнити (в котороевходит и Майкрософт) Скрывает от разработчиков множество низкоуровневых вещей Множество плагинов Интуитивно понятный синтаксис $('#something').hide().css('background', 'red').fadeIn();
Кто использует jQuery? http://jquery.com/
Статистика использования
jQuery Mobile http://jquerymobile.com/
Microsoft & jQuery 1997: Classic ASP 1, 2, 3 2002: ASP.NET 1.0 and WebForms Ajax Control Toolkit 2003 to 2007: ASP.NET 1.1, 2, 3, 3.5 2008: Visual Studio 2008 - including jQuery 2008: Official Support for jQuery 2009: ASP.NET MVC – including jQuery 2009: ASP.NET Ajax Library 2009: jQuery on the Microsoft CDN 2010: ASP.NET 4 – including jQuery
Демо Включение Intellisenceдля jQueryв Visual Studio 2010
jQuery(Selectors)
Selectors //Selects all the anchor tags in the DOM $('a') //Selects all the anchor tags inside of div elements in the DOM $('div a') //Selects all the elements with a class of 'odd' $('.odd') //Selects all the tr elements with a class of 'odd' $('tr.odd')
Selectors // Selects all links that ends with mp3 in the href $("a[href$='mp3']") // Selects all links that are set to open a new window $("a[target='_blank']") // Selects all links that have a class that begins with "custom" $("a[class^='custom']")
Selectors // Selects all the input elements $(':input') // Selects all the disabled input elements $(':disabled') // Selects the 4rd (0 based) list item $('li:eq(3)') // Selects links to pdfthat are children of a list item $('li > a[href$=pdf]') // Selects list items that have links inside of them $('li:has(a)')
Selector Context // use "span a" selector to find the link $('span a.myClass').addClass('highlight'); // Start at #myDiv context & use "span a" selector to find the link $('span a.myClass', '#myDiv').addClass('highlight');
Caching Selectors // Uncached code $('#myButton').click(function() { $('#alertMessage').hide(); $('#alertMessage').html('<b>Really BadError</b>'); $('#alertMessage').fadeIn('slow'); }); // Cached code $('#myButton').click(function() { var $alertMessage = $('#alertMessage'); $alertMessage.hide(); $alertMessage.html('<b>Really Bad Error</b>'); $alertMessage.fadeIn('slow'); });
Caching Selectors // Chaining $('#myButton').click(function() { 	$('#alertMessage').hide() 	.html('<b>Really Bad Error</b>') 	.fadeIn('slow'); });
Демо SelectorGadget http://www.selectorgadget.com/
jQuery(Storing Data)
Storing Data (Bad Practice) //Storing special information about the anchor in the alt attribute $('a').attr('alt', 'Special info about this HTML tag'); //Getting the special information from the anchor's alt attribute $('a').attr('alt')
Storing Data (Best Practice) // Storing a complex data structure under the specialInfo key $('a').data('specialInfo', { firstName: 'Denis', lastName: 'Reznik' }); //Getting the complex data structure specialInfo & accessing the firstName property $('a').data('specialInfo').firstName;
Storing Data (Best Practice) $("li.demo").data({ firstName: “Denis", lastName: “Reznik“ }); console.dir($("li.demo").data()); $("li.demo").data("someKey", 	{ firstName: “John", lastName: “Smith“ }); console.dir($("li.demo").data()); console.log($("li.demo").data().someKey.firstName);
jQuery(Events)
Event Bubbling <ulid="sites"> <li> 		<aid="microsoft"href="http://www.microsoft.com"> 				microsoft</a> </li> <li> 	<aid="jquery"href="http://www.jquery.com"> 				jquery</a> </li> <li> 	<aid="google"href="http://www.google.com"> 				google</a> </li> <li> 	<aid="facebook"href="http://www.facebook.com"> 				facebook</a> </li> </ul>
Event binding // bind couple of events varclickMe = function() { 	console.log('Hello World!'); }; $("p.clickMe").click(clickMe).dblclick(clickMe); // Another variant of binding $("p.clickMe").bind("click dblclick", clickMe);
Event unbinding //really dangerous $("p.clickMe").unbind(); //moderately dangerous $("p.clickMe").unbind("click dblclick");  //safe $("p.clickMe").unbind("click dblclick", clickMe);
Live and Die // Dynamic Hello will not have click handler $("p.sayHello").bind('click', function() { 	console.log('Hello World!'); }); $('body').append("<p class='sayHello'>Dynamic Hello</p>"); // Dynamic Hello will have click handler $("p.sayHello").live('click', function() { 	console.log('Hello World!'); }); /* die() || die("click") || die("click", clickMe) */ $('body').append("<p class='sayHello'>Dynamic Hello</p>");
Preventing default behavior // Doesn't prevent event bubbling $('a').click(function (e) { e.preventDefault(); }); // Preventing event bubbling $('a').click(function () { 	returnfalse; }); returnfalse = e.preventDefault() + e.stopPropagation
Delegate and Undelegate // Event will not bubble up varclickMe = function() { varelement = $(this); element.text(element.text() + ' :)'); }; $("ul.demo").delegate("li", "click", clickMe); /* undelegate(), undelegate("li", "click"), undelegate("li", "click", clickMe) */ $("ul.demo").append("<li>Dynamic Item</li>");
jQuery(AJAX)
Использование AJAX в jQuery Базовый метод для подгрузки контента с сервера: load() url parameters: данные которые будут передаваться(string, object...). Если указаны, идёт POST, если нет -GET callback (optional) Наряду с load() можно использовать $.get()/$.getJson() or $.post() $('#someDiv').load('test.html', function () { ('Load wasperformed.'); });
Использование AJAX в jQuery Если необходим больший контроль над AJAX запросом, используем: $.ajax() options: определяет объект, содержащий все параметры для запроса Когда параметров много, используем $.ajaxSetup options: определяет объект, содержащий все параметры для запроса, который становится дефолтным для всех Ajax запросов
Использование AJAX в jQuery $.ajax({ 	url: 'document.xml', 	type: 'GET', dataType: 'xml', 	timeout: 1000, 	error: function () { 		alert('Error loading XML document'); }, 	success: function (xml) { 		// do something with xml } }); $('#stats').load('stats.html');
Использование AJAX в jQuery $.ajaxSetup({ 	type: 'POST', 	timeout: 5000, dataType: 'html' }); $.ajaxSetup ({  	cache: false });
Демо Использование AJAX в jQuery
Свежие новости! 3 новых плагина от Microsoft jQuery Templates jQuery Data Link jQuery Globalization Теперь это официальные плагины Будут частью jQuery (в версии 1.5)
jQuery Templates Шаблоны это разметкаHTML (содержащая символы подстановки) 3 метода: .tmpl():рендерит шаблон .tmplItem(): находит шаблонный элемент .template(): компилирует шаблон <scriptid="movieTemplate"type="text/x-jquery-tmpl"> <li><b>${Name}</b> (${ReleaseYear})</li> </script>
.tmpl() Берёт шаблон и рендерит его контент, используя определённый набор данных .tmpl( [ data ], [ options ] ) Data: Данные для рендеринга. Может быть любого типа, включая Array иObject Options: дополнительный набор пар ключ-значение, определяемых пользователем Может использоваться в связке с локальными данными, и удалёнными данными(ajax) $("#myTemplate").tmpl(myData)
Демо Использование jQuery Templates
jQuery Data Link Data linking – механизм привязки данных вjQuery Позволяет связывать поле объекта с полем другого объекта Связвание происходит через функцию.link() Когда значение поля меняется, свойство связанного объекта также меняется По-умолчанииюсвязываниедвустороннее var person = {}; $("form").link(person);
Демо jQuery Data Link
jQuery Globalization Содержит в себе информацию о более чем350 (!) культурах Валюта Формат даты (вкючая названия месяцев) Числовые форматы Использование стандартизированных идентификаторовкультуры (uk-ua, и т.д.)
Демо jQuery Globalization
Summary Легковесный и легкий в использовании JavaScriptфреймворк Кросс-браузерность, сокрытие низкоуровневых деталей Понятная модель событий Может работать сMVC иWebForms Легко расширяем
Welcome to the Party!!!
ДенисРезник Руководитель департамента разработки, DCT Trainer, Microsoft Innovation Center Microsoft MVP (SQL Server) Microsoft Certified Trainer DenisReznik@live.ru http://reznik.uneta.com.ua/ http://twitter.com/DenisReznik MCPD - Web Developer 4 MCITP – Database Developer 2008 MCTS - .NET Framework 4, Web Applications MCTS - SQL Server 2008, Database Development MCTS - .NET Framework 4, Data Access with ADO.NET MCTS - SQL Server 2008, Implementation and Maintenance MCITP - SQL Server 2008, Implementation and Maintenance

More Related Content

Similar to MS Swit 2010

Core rest edgarsilva_v1
Core rest edgarsilva_v1Core rest edgarsilva_v1
Core rest edgarsilva_v1Edgar Silva
 
Mini charla jquery
Mini charla jqueryMini charla jquery
Mini charla jquerylizardoceliz
 
Aspetos gerais de desenvolvimento web.
Aspetos gerais de desenvolvimento web.Aspetos gerais de desenvolvimento web.
Aspetos gerais de desenvolvimento web.Corcioli
 
FISL11 - REST com Java - WebServices Simples e Ágeis
FISL11 - REST com Java -  WebServices Simples e ÁgeisFISL11 - REST com Java -  WebServices Simples e Ágeis
FISL11 - REST com Java - WebServices Simples e ÁgeisEdgar Silva
 
ADO.NET Entity Framework 4
ADO.NET Entity Framework 4ADO.NET Entity Framework 4
ADO.NET Entity Framework 4Raffaele Fanizzi
 
N03 app engineseminar
N03 app engineseminarN03 app engineseminar
N03 app engineseminarSun-Jin Jang
 
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013Moscow.pm
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 zhen chen
 
Chico-UI en escuela DaVinci
Chico-UI en escuela DaVinciChico-UI en escuela DaVinci
Chico-UI en escuela DaVinciNatan Santolo
 
Fatih BAZMAN CodeIgniter Sunumu
Fatih BAZMAN CodeIgniter SunumuFatih BAZMAN CodeIgniter Sunumu
Fatih BAZMAN CodeIgniter SunumuFatih Bazman
 
HTML5 WebSocket 발표 자료
HTML5 WebSocket 발표 자료HTML5 WebSocket 발표 자료
HTML5 WebSocket 발표 자료Zany Lee
 
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиковCodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиковCodeFest
 
Uso de la Programación para la Seguridad en Redes (a.k.a. Sockets y Shellcoding)
Uso de la Programación para la Seguridad en Redes (a.k.a. Sockets y Shellcoding)Uso de la Programación para la Seguridad en Redes (a.k.a. Sockets y Shellcoding)
Uso de la Programación para la Seguridad en Redes (a.k.a. Sockets y Shellcoding)Pedro Valera
 
No sql pour valtech tech days
No sql pour valtech tech daysNo sql pour valtech tech days
No sql pour valtech tech daysClaude Falguiere
 
UglifyJS 使用文档
UglifyJS 使用文档UglifyJS 使用文档
UglifyJS 使用文档明 李
 
Seguridad en Servicios Web
Seguridad en Servicios WebSeguridad en Servicios Web
Seguridad en Servicios WebHacking Bolivia
 

Similar to MS Swit 2010 (20)

Core rest edgarsilva_v1
Core rest edgarsilva_v1Core rest edgarsilva_v1
Core rest edgarsilva_v1
 
Mini charla jquery
Mini charla jqueryMini charla jquery
Mini charla jquery
 
Aspetos gerais de desenvolvimento web.
Aspetos gerais de desenvolvimento web.Aspetos gerais de desenvolvimento web.
Aspetos gerais de desenvolvimento web.
 
FISL11 - REST com Java - WebServices Simples e Ágeis
FISL11 - REST com Java -  WebServices Simples e ÁgeisFISL11 - REST com Java -  WebServices Simples e Ágeis
FISL11 - REST com Java - WebServices Simples e Ágeis
 
ADO.NET Entity Framework 4
ADO.NET Entity Framework 4ADO.NET Entity Framework 4
ADO.NET Entity Framework 4
 
N03 app engineseminar
N03 app engineseminarN03 app engineseminar
N03 app engineseminar
 
Der lachende Dritte
Der lachende DritteDer lachende Dritte
Der lachende Dritte
 
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
 
Perl para sysadmins
Perl para sysadminsPerl para sysadmins
Perl para sysadmins
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
 
Chico-UI en escuela DaVinci
Chico-UI en escuela DaVinciChico-UI en escuela DaVinci
Chico-UI en escuela DaVinci
 
Türsteher für Bohnen
Türsteher für BohnenTürsteher für Bohnen
Türsteher für Bohnen
 
Fatih BAZMAN CodeIgniter Sunumu
Fatih BAZMAN CodeIgniter SunumuFatih BAZMAN CodeIgniter Sunumu
Fatih BAZMAN CodeIgniter Sunumu
 
HTML5 WebSocket 발표 자료
HTML5 WebSocket 발표 자료HTML5 WebSocket 발표 자료
HTML5 WebSocket 발표 자료
 
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиковCodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
 
Uso de la Programación para la Seguridad en Redes (a.k.a. Sockets y Shellcoding)
Uso de la Programación para la Seguridad en Redes (a.k.a. Sockets y Shellcoding)Uso de la Programación para la Seguridad en Redes (a.k.a. Sockets y Shellcoding)
Uso de la Programación para la Seguridad en Redes (a.k.a. Sockets y Shellcoding)
 
No sql pour valtech tech days
No sql pour valtech tech daysNo sql pour valtech tech days
No sql pour valtech tech days
 
初识 Html5
初识 Html5初识 Html5
初识 Html5
 
UglifyJS 使用文档
UglifyJS 使用文档UglifyJS 使用文档
UglifyJS 使用文档
 
Seguridad en Servicios Web
Seguridad en Servicios WebSeguridad en Servicios Web
Seguridad en Servicios Web
 

More from Денис Резник

MS DevDay - SQLServer 2014 for Developers
MS DevDay - SQLServer 2014 for DevelopersMS DevDay - SQLServer 2014 for Developers
MS DevDay - SQLServer 2014 for DevelopersДенис Резник
 
TechEd 2012 - Сценарии хранения и обработки данных в windows azure
TechEd 2012 - Сценарии хранения и обработки данных в windows azureTechEd 2012 - Сценарии хранения и обработки данных в windows azure
TechEd 2012 - Сценарии хранения и обработки данных в windows azureДенис Резник
 
MS Swit 2012 - Windows 8 Application Lifecycle
MS Swit 2012 - Windows 8 Application LifecycleMS Swit 2012 - Windows 8 Application Lifecycle
MS Swit 2012 - Windows 8 Application LifecycleДенис Резник
 
Масштабирование в SQL Azure - SQL Azure Federations
Масштабирование в SQL Azure - SQL Azure FederationsМасштабирование в SQL Azure - SQL Azure Federations
Масштабирование в SQL Azure - SQL Azure FederationsДенис Резник
 
Масштабирование в SQL Azure - SQL Azure Federations
Масштабирование в SQL Azure - SQL Azure FederationsМасштабирование в SQL Azure - SQL Azure Federations
Масштабирование в SQL Azure - SQL Azure FederationsДенис Резник
 
начинаем работать с Sql server compact
начинаем работать с Sql server compactначинаем работать с Sql server compact
начинаем работать с Sql server compactДенис Резник
 
масштабирование в Sql azure
масштабирование в Sql azureмасштабирование в Sql azure
масштабирование в Sql azureДенис Резник
 

More from Денис Резник (13)

iForum 2015: SQL vs. NoSQL
iForum 2015: SQL vs. NoSQLiForum 2015: SQL vs. NoSQL
iForum 2015: SQL vs. NoSQL
 
MS DevDay - SQLServer 2014 for Developers
MS DevDay - SQLServer 2014 for DevelopersMS DevDay - SQLServer 2014 for Developers
MS DevDay - SQLServer 2014 for Developers
 
SqlSaturday199 - Deadlocks
SqlSaturday199 - DeadlocksSqlSaturday199 - Deadlocks
SqlSaturday199 - Deadlocks
 
SqlSaturday199 - Columnstore Indexes
SqlSaturday199 - Columnstore IndexesSqlSaturday199 - Columnstore Indexes
SqlSaturday199 - Columnstore Indexes
 
SQL Server 2012 Deep Dive (rus)
SQL Server 2012 Deep Dive (rus)SQL Server 2012 Deep Dive (rus)
SQL Server 2012 Deep Dive (rus)
 
24 hop - Deadlocks
24 hop - Deadlocks24 hop - Deadlocks
24 hop - Deadlocks
 
TechEd 2012 - Сценарии хранения и обработки данных в windows azure
TechEd 2012 - Сценарии хранения и обработки данных в windows azureTechEd 2012 - Сценарии хранения и обработки данных в windows azure
TechEd 2012 - Сценарии хранения и обработки данных в windows azure
 
MS Swit 2012 - Windows 8 Application Lifecycle
MS Swit 2012 - Windows 8 Application LifecycleMS Swit 2012 - Windows 8 Application Lifecycle
MS Swit 2012 - Windows 8 Application Lifecycle
 
Масштабирование в SQL Azure - SQL Azure Federations
Масштабирование в SQL Azure - SQL Azure FederationsМасштабирование в SQL Azure - SQL Azure Federations
Масштабирование в SQL Azure - SQL Azure Federations
 
Масштабирование в SQL Azure - SQL Azure Federations
Масштабирование в SQL Azure - SQL Azure FederationsМасштабирование в SQL Azure - SQL Azure Federations
Масштабирование в SQL Azure - SQL Azure Federations
 
начинаем работать с Sql server compact
начинаем работать с Sql server compactначинаем работать с Sql server compact
начинаем работать с Sql server compact
 
масштабирование в Sql azure
масштабирование в Sql azureмасштабирование в Sql azure
масштабирование в Sql azure
 
WebMatrix
WebMatrixWebMatrix
WebMatrix
 

MS Swit 2010

  • 1. Создание ASP.NET приложений при помощиAJAX, JQueryиVisual Studio 2010 Денис РезникDigital Cloud Technologies
  • 4. Как это работает CLIENT Business Logic Application Data DOM, JavaScript, CSS, XML, JSON, etc. XML HTTP Request Object TRANSPORT HTTP SERVER Web Service C#, VB.NET, ASPX, XML, SQL, etc. Application Data Business Logic
  • 5. AJAX functioncreateRequestObject(){    if(window.XMLHttpRequest){    try{    returnnewXMLHttpRequest();    }catch(e){}    } elseif(window.ActiveXObject){    try{   returnnewActiveXObject('Msxml2.XMLHTTP');    }catch(e){    try{    returnnewActiveXObject('Microsoft.XMLHTTP');    }catch(e){}    }    }     returnnull;}
  • 9. Update Panel Самая популярная штука Частичный рендеринг страницы Автоматическое преобразованиепостбековв асинхронные колбеки Автоматическое обновление контента при помощи результатов колбека Не нужно никаких знанийJavaScript илиXmlHttpRequest Высокоуровневая надстройка над XmlHttpRequest Преимущества: Крайне просто в использовании Недостатки: Менее эффективено чем класическийAJAX
  • 10. Update Panel Browser submits HTTP request to server 1 Browser Web Server Server responds with content; browser renders that content 2 Browser submits async XML- HTTP request to server; UI remains responsive; page doesn't flash 3 XML-HTTP request completes; JavaScript refreshes portion of page affected by response 4
  • 11. AJAX Toolkit Самый популярный проект на CodePlex > 25 000 скачиваний каждую неделю Легко интегрируется в Visual Studio 2010 Идеально подходит для Web Forms проектов
  • 13. AJAX и SEO AJAX – плохо для SEO Поисковые роботы любят чистый HTML Убедитесь, что у вас есть URL для каждой "страницы", которую вы хотите показать роботам и желаете, чтобы она была проиндексирована Загрузите часть контента с ключевыми словами не динамически Разделы меню, ссылки и другие важные структурные аспекты сайта должны работать без AJAX и/или JavaScript
  • 15. AJAX CDN CDN (Content Delivery Network) — географически распределённая сетевая инфраструктура, позволяющая оптимизировать доставку контента конечным пользователям
  • 17.
  • 18. Использование AJAX CDN Подгрузка скриптов cCDN
  • 19. AJAXLibrary Client Side is dead. Почему? Потому чтоjQuery
  • 21. Почему jQueryэто круто? Легковесный и быстрый фреймворк Огромное комьюнити (в котороевходит и Майкрософт) Скрывает от разработчиков множество низкоуровневых вещей Множество плагинов Интуитивно понятный синтаксис $('#something').hide().css('background', 'red').fadeIn();
  • 25. Microsoft & jQuery 1997: Classic ASP 1, 2, 3 2002: ASP.NET 1.0 and WebForms Ajax Control Toolkit 2003 to 2007: ASP.NET 1.1, 2, 3, 3.5 2008: Visual Studio 2008 - including jQuery 2008: Official Support for jQuery 2009: ASP.NET MVC – including jQuery 2009: ASP.NET Ajax Library 2009: jQuery on the Microsoft CDN 2010: ASP.NET 4 – including jQuery
  • 26. Демо Включение Intellisenceдля jQueryв Visual Studio 2010
  • 28. Selectors //Selects all the anchor tags in the DOM $('a') //Selects all the anchor tags inside of div elements in the DOM $('div a') //Selects all the elements with a class of 'odd' $('.odd') //Selects all the tr elements with a class of 'odd' $('tr.odd')
  • 29. Selectors // Selects all links that ends with mp3 in the href $("a[href$='mp3']") // Selects all links that are set to open a new window $("a[target='_blank']") // Selects all links that have a class that begins with "custom" $("a[class^='custom']")
  • 30. Selectors // Selects all the input elements $(':input') // Selects all the disabled input elements $(':disabled') // Selects the 4rd (0 based) list item $('li:eq(3)') // Selects links to pdfthat are children of a list item $('li > a[href$=pdf]') // Selects list items that have links inside of them $('li:has(a)')
  • 31. Selector Context // use "span a" selector to find the link $('span a.myClass').addClass('highlight'); // Start at #myDiv context & use "span a" selector to find the link $('span a.myClass', '#myDiv').addClass('highlight');
  • 32. Caching Selectors // Uncached code $('#myButton').click(function() { $('#alertMessage').hide(); $('#alertMessage').html('<b>Really BadError</b>'); $('#alertMessage').fadeIn('slow'); }); // Cached code $('#myButton').click(function() { var $alertMessage = $('#alertMessage'); $alertMessage.hide(); $alertMessage.html('<b>Really Bad Error</b>'); $alertMessage.fadeIn('slow'); });
  • 33. Caching Selectors // Chaining $('#myButton').click(function() { $('#alertMessage').hide() .html('<b>Really Bad Error</b>') .fadeIn('slow'); });
  • 36. Storing Data (Bad Practice) //Storing special information about the anchor in the alt attribute $('a').attr('alt', 'Special info about this HTML tag'); //Getting the special information from the anchor's alt attribute $('a').attr('alt')
  • 37. Storing Data (Best Practice) // Storing a complex data structure under the specialInfo key $('a').data('specialInfo', { firstName: 'Denis', lastName: 'Reznik' }); //Getting the complex data structure specialInfo & accessing the firstName property $('a').data('specialInfo').firstName;
  • 38. Storing Data (Best Practice) $("li.demo").data({ firstName: “Denis", lastName: “Reznik“ }); console.dir($("li.demo").data()); $("li.demo").data("someKey", { firstName: “John", lastName: “Smith“ }); console.dir($("li.demo").data()); console.log($("li.demo").data().someKey.firstName);
  • 40. Event Bubbling <ulid="sites"> <li> <aid="microsoft"href="http://www.microsoft.com"> microsoft</a> </li> <li> <aid="jquery"href="http://www.jquery.com"> jquery</a> </li> <li> <aid="google"href="http://www.google.com"> google</a> </li> <li> <aid="facebook"href="http://www.facebook.com"> facebook</a> </li> </ul>
  • 41. Event binding // bind couple of events varclickMe = function() { console.log('Hello World!'); }; $("p.clickMe").click(clickMe).dblclick(clickMe); // Another variant of binding $("p.clickMe").bind("click dblclick", clickMe);
  • 42. Event unbinding //really dangerous $("p.clickMe").unbind(); //moderately dangerous $("p.clickMe").unbind("click dblclick"); //safe $("p.clickMe").unbind("click dblclick", clickMe);
  • 43. Live and Die // Dynamic Hello will not have click handler $("p.sayHello").bind('click', function() { console.log('Hello World!'); }); $('body').append("<p class='sayHello'>Dynamic Hello</p>"); // Dynamic Hello will have click handler $("p.sayHello").live('click', function() { console.log('Hello World!'); }); /* die() || die("click") || die("click", clickMe) */ $('body').append("<p class='sayHello'>Dynamic Hello</p>");
  • 44. Preventing default behavior // Doesn't prevent event bubbling $('a').click(function (e) { e.preventDefault(); }); // Preventing event bubbling $('a').click(function () { returnfalse; }); returnfalse = e.preventDefault() + e.stopPropagation
  • 45. Delegate and Undelegate // Event will not bubble up varclickMe = function() { varelement = $(this); element.text(element.text() + ' :)'); }; $("ul.demo").delegate("li", "click", clickMe); /* undelegate(), undelegate("li", "click"), undelegate("li", "click", clickMe) */ $("ul.demo").append("<li>Dynamic Item</li>");
  • 47. Использование AJAX в jQuery Базовый метод для подгрузки контента с сервера: load() url parameters: данные которые будут передаваться(string, object...). Если указаны, идёт POST, если нет -GET callback (optional) Наряду с load() можно использовать $.get()/$.getJson() or $.post() $('#someDiv').load('test.html', function () { ('Load wasperformed.'); });
  • 48. Использование AJAX в jQuery Если необходим больший контроль над AJAX запросом, используем: $.ajax() options: определяет объект, содержащий все параметры для запроса Когда параметров много, используем $.ajaxSetup options: определяет объект, содержащий все параметры для запроса, который становится дефолтным для всех Ajax запросов
  • 49. Использование AJAX в jQuery $.ajax({ url: 'document.xml', type: 'GET', dataType: 'xml', timeout: 1000, error: function () { alert('Error loading XML document'); }, success: function (xml) { // do something with xml } }); $('#stats').load('stats.html');
  • 50. Использование AJAX в jQuery $.ajaxSetup({ type: 'POST', timeout: 5000, dataType: 'html' }); $.ajaxSetup ({ cache: false });
  • 52. Свежие новости! 3 новых плагина от Microsoft jQuery Templates jQuery Data Link jQuery Globalization Теперь это официальные плагины Будут частью jQuery (в версии 1.5)
  • 53. jQuery Templates Шаблоны это разметкаHTML (содержащая символы подстановки) 3 метода: .tmpl():рендерит шаблон .tmplItem(): находит шаблонный элемент .template(): компилирует шаблон <scriptid="movieTemplate"type="text/x-jquery-tmpl"> <li><b>${Name}</b> (${ReleaseYear})</li> </script>
  • 54. .tmpl() Берёт шаблон и рендерит его контент, используя определённый набор данных .tmpl( [ data ], [ options ] ) Data: Данные для рендеринга. Может быть любого типа, включая Array иObject Options: дополнительный набор пар ключ-значение, определяемых пользователем Может использоваться в связке с локальными данными, и удалёнными данными(ajax) $("#myTemplate").tmpl(myData)
  • 56. jQuery Data Link Data linking – механизм привязки данных вjQuery Позволяет связывать поле объекта с полем другого объекта Связвание происходит через функцию.link() Когда значение поля меняется, свойство связанного объекта также меняется По-умолчанииюсвязываниедвустороннее var person = {}; $("form").link(person);
  • 58. jQuery Globalization Содержит в себе информацию о более чем350 (!) культурах Валюта Формат даты (вкючая названия месяцев) Числовые форматы Использование стандартизированных идентификаторовкультуры (uk-ua, и т.д.)
  • 60. Summary Легковесный и легкий в использовании JavaScriptфреймворк Кросс-браузерность, сокрытие низкоуровневых деталей Понятная модель событий Может работать сMVC иWebForms Легко расширяем
  • 61. Welcome to the Party!!!
  • 62. ДенисРезник Руководитель департамента разработки, DCT Trainer, Microsoft Innovation Center Microsoft MVP (SQL Server) Microsoft Certified Trainer DenisReznik@live.ru http://reznik.uneta.com.ua/ http://twitter.com/DenisReznik MCPD - Web Developer 4 MCITP – Database Developer 2008 MCTS - .NET Framework 4, Web Applications MCTS - SQL Server 2008, Database Development MCTS - .NET Framework 4, Data Access with ADO.NET MCTS - SQL Server 2008, Implementation and Maintenance MCITP - SQL Server 2008, Implementation and Maintenance