SlideShare a Scribd company logo
1 of 53
Download to read offline
jQuery Makes Writing JavaScript
Fun Again

 Doris Chen Ph.D.
 Developer Evangelist
 Microsoft
 http://blogs.msdn.com/b/dorischen/
Who am I?
• Developer Evangelist at Microsoft based in Silicon Valley, CA
   – Blog: http://blogs.msdn.com/b/dorischen/
   – Twitter @doristchen
   – Email: doris.chen@microsoft.com
• Has over 13 years of experience in the software industry focusing on
  web technologies
• Spoke and published widely at JavaOne, O'Reilly, SD West, SD
  Forum and worldwide User Groups meetings
• Before joining Microsoft, Doris Chen was a Technology Evangelist at
  Sun Microsystems
• Doris received her Ph.D. from the University of California at Los
  Angeles (UCLA)
Agenda
• Essentials of jQuery
• New jQuery Plugins: Templates, DataLink,
  Globalization
• Working with OData, JSONP, Netflix
• Working with Web Services, Database and
  OData
• Summary
What is AJAX?
• Ajax= acronym for:
  > Asynchronous JavaScript And XML(or
    XMLHTTPRequest )
• Browser client uses JavaScript to
  Asynchronously get data from a server and
  update page dynamically without refreshing the
  whole page
• More interactive user experience
Traditional Web   AJAX
                    within a browser,
                   there is AJAX
                   engine
“Naked” Ajax is too complex
• A lot of JavaScript programming involved
  > “It is buggy and broken”
  > “Used for annoying people”
  > Difficult to debug and maintain
  > ...
• You need a deep understanding of Ajax
  techniques
• Have to handle all XmlHttpRequest interactions
  yourself
• Have to handle cross browser inconsistence
  yourself
Solutions
• JavaScript Toolkits
  > Wrap up ajax details in javascript libraries
  > jQuery, Dojo, prototype+scriptaculous, Yahoo,...
jQuery Adoption




http://trends.builtwith.com/javascript/JQuery
What is jQuery?
• Created by John Resig and first announced Jan 2006 at
  BarCampNYC
• Most popular JavaScript library in use today
  > simplifies the interaction between HTML and JavaScript
• Free, open source (MIT, GPL)
• Cross Browser
  > IE6+, FF2+, Sarari 3+, Chrome, Opera 9+
• Find it at http://jquery.com
• It’s a joy to use
Why jQuery ?
• Cross-browser compatibility
• Fast & Small
    – 24KB in size (Minified and Gzipped)
    – Core is minimum and add Plugins when
•    Short Learning curve & Great Documentation
•   Tons of Plug-in: jQuery plugin repository
•   CSS3 Selectors Compliant
•   Helpful Utilities
    – string trimming, easily extend objects, iteration, array
      manipulation, support function
• jQuery UI: jQuery User Interface
• Widespread Adoption
    – Google, Microsoft, Amazon, Twitter, Dell, Mozilla, Wordpress &
      Drupal, HP, IBM, Intel, Ruby on Rails
Getting Start
• Download jQuery at jquery.com
  – <script type="text/javascript" src="/js/jQuery. js"></script>
• Microsoft CDN or Google CDN
  – <script src="http://ajax.microsoft.com/ajax/jquery/jquery-
    1.4.2.js" type="text/javascript"></script>
  – <script type="text/javascript"
    src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jqu
    ery.js"></script>
jQuery Philosophy



Find someone        Do something to
  from HTML               it
   (selector)          (method)
Focus of jQuery
• Find someone in HTML and do something


      $(“div”).addClass(“header”)

• JQuery object
  > Commonly used “$”
  > Can also named “jQuery”


     jQuery(“div”).addClass(“header”)
Find Someone: Selector
• CSS Style
  –   $(“#myID”)              // by id
  –   $(“.myClass”)           // by class name
  –   $(“myTag”)              // by tag (element name)
  –   $(“#id, .class, tag”)   // multiple
• Hierarchy
  – $("form input")           // descendant
  – $("#main > *")            // child
  – $("#prev ~ div")          // sibling
• Form
  – $("form :radio")
  – $("#dvMainForm :checkbox")
  – $("input:disabled")
Do something with the found
               elements
• Attributes get/set
• Manipulation
• Events
• Effects
• AJAX
Attribute
•   $("em").attr("title")
•   $("label").html()
                                    Get
•   $("p:first").text()
•   $("input").val() • $("em").attr("title", "zupzip")
                      • $("label").html("zupzip")
      Set
                      • $("p:first").text("zupzip")
                      • $("input").val("zupzip")
Manipulation
• Apply css style dynamically
   – $(“#target”).addClass(“css_class”);
• Toggle css style
   – $(“#target”).toggleClass(“css_class”);
• Append
   – $("p").append("<strong>Hello</strong>");
• appendTo
   – $("span").appendTo("#foo");
• prepend &prependTo
• after
   – $("p").after("<b>Hello</b>");
• before
   – $("p").before("<b>Hello</b>"); Manipulations Demo
Events
• click, hover, change....
   $(“#target”).click(function(){....});
• bind
   $(“#target”).bind(“click”, function(){....});
• Chain event handlers
   $(“#target”).click(....).hover(...);

                                Events Demo
Effects
• Show and Hide
   – $(“#target”).show()
   – $(“#target”).hide()
• Fade in and out
   – $(“#target”).fadein()
   – $(“#target”).fadeout()
• Slide up and down
   – $(“#target”).slideup()
   – $(“#target”).slidedown()
• Custom animation              Animation Demo
AJAX
• load(url, [data], callback)
  > $(„#myContainer‟).load(„home/myHtmlSnippet‟);

• $.get(url, [data], callback)
• $.post(url, [data], callback)
• $.ajax(options)
  > $.ajax({
    type : “GET”
        url : “url”
        data : data
        success : callback
    });
jQuery Stack & Chaining
$(‘body’)        // [body]
  .find(‘p’) // [p, p, p] > [body]
     .find(‘a’) // [a, a] > [p, p, p] > [body]
.addClass(‘foo’)
     .end() // [p, p, p] > [body]
   .end()       // [body]

                                             21
jQuery Stack & Chaining

$(‘tr’)             //get all rows
 .filter(‘:odd’)    //get all odd rows
   .addClass(‘myOddClass’)
   .end()           //back to all rows
 .filter(‘:even’)   //get all even rows
     .addClass(‘myEvenClass’);

                                          22
Agenda
• Essentials of jQuery
• New jQuery Plugins: Templates, DataLink,
  Globalization
• Working with OData, JSONP, Netflix
• Working with Web Services, Database and
  OData
• Summary
Microsoft is Contributing to jQuery Library
• jQuery Templates plugin, Data Link plugin, and Globalization plugin have
  been accepted as officially supported plugins of the jQuery project
   – jQuery Templates (with jQuery 1.4.2) and Datalink plugins (with jQuery
       1.4.3) will be managed by the jQuery Core team
   – jQuery Globalization plugin will become part of the jQuery UI project
   – jQuery Templates plugin will be part of jQuery Core library 1.5
• API Documentation
   – jQuery Templates http://api.jquery.com/category/plugins/templates/
   – jQuery Data Link– http://api.jquery.com/category/plugins/data-link/
   – jQuery Globalization– Available soon
• Download
   – jQuery Templates – http://github.com/jquery/jquery-tmpl
   – jQuery Datalink – http://github.com/jquery/jquery-datalink
   – jQuery Globalization – http://github.com/jquery/jquery-global
• Full product support for jQuery
   – Ship with Visual Studio with Great Intellisense support
Templates Plugin (jQuery 1.4.2)
• create client templates
   – e.g. format a set of database records from the server
     through an Ajax request
    <body>
    <ul id="movieList"></ul>
    <script id="movieTemplate" type="text/x-jquery-tmpl">
      <li><b>${Name}</b> (${ReleaseYear})</li>
    </script>
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script src="http://nje.github.com/jquery-tmpl/jquery.tmpl.js"></script>
    <script>
    var movies = [
       { Name: "The Red Violin", ReleaseYear: "1998" },
       { Name: "Eyes Wide Shut", ReleaseYear: "1999" },
       { Name: "The Inheritance", ReleaseYear: "1976" }
    ];
    $( "#movieTemplate" ).tmpl( movies )
       .appendTo( "#movieList" );
    </script> </body>
Datalink Plugin (jQuery 1.4.3)
• Easily keep user interface and data synchronized
   – automatically synchronize the input fields of a form with the
      properties of JavaScript product object
   <script src="http://github.com/nje/jquery-
   datalink/raw/e3e3be4312c9b224a8d9b25031f4ac876e4f70fd/jquery.js"></script>
    <script src="http://github.com/nje/jquery-datalink/raw/master/jQuery.datalink.js"></script>
   <form> <div>
       First Name: <input type="text" name="firstName" />
   </div></form>
     person.firstName: <span id="objFirst"></span><br/>
    <script>
     var person = {}; $("form").link(person);
     // Chain link the person object to these elements to show the results
     $("#objFirst").link(person, {
       firstName: {
          name: "objFirst",
          convertBack: function (value, source, target) {
             $(target).text(value);
          } } });
   $(person).data("firstName", "John");
   </script>
Globalization Plugin (jQuery 1.4.2)
• enables you to use different cultural
  conventions
• formatting or parsing numbers, dates and
  times, calendars, and currencies
• has information on over 350 cultures
• can use this plugin with the core jQuery library
  or plugins built on top of the jQuery library
Agenda
• Essentials of jQuery
• New jQuery Plugins: Templates, DataLink,
  Globalization
• Working with OData, JSONP, Netflix
• Working with Web Services, Database and
  OData
• Summary
Develop Netflix Movie Search Application using
jQuery, OData, JSONP and Netflix Technologies
                     JSONP Ajax Call

                       OData Query

                 http://odata.netflix.com/Catalo
                 g/Titles?$filter=Name%20eq%2      Netflix OData
                 0'Star%20Trek'                      Provider

                      OData in JSON
                 Callback Render on jQuery Template
OData
• Web protocol for querying and updating data
• Uniform way of representing structured data
   – Atom, JSON formats
• Uniform URL conventions
   – Navigation, filtering, sorting, paging, etc.
      • /Bookmarks?$orderby=Name        //sorting
      • /Bookmarks?$top=10&$skip=30     //paging
• Uniform operations
   – Addressability
   – GET, POST, PUT, DELETE
• http://www.odata.org/
Netflix OData in Atom
Netflix OData in Feeder Reading View
Netflix OData Diagram



          Query String


http://odata.netflix.com/Catalog/Titles?$filter
=Name%20eq%20'Star%20Trek'
Key Steps
•   Start with an empty HTML page
•   Define style or you can put it in a css file
•   Develop start up page
•   Define the template of the response page
•   Compose the JSONP call
•   Implement callback routine and using jQuery template
    – Microsoft has contributed jQuery template jquery.tmpl.js to
      jQuery project and it will be part jQuery in next release.
• Implement movie play using Netflix API
    – You need to apply a Netflix Developer API account and get the
      key.
    – More information http://developer.netflix.com/
Style
<head>
    <title>Search Movies</title>
    <style type="text/css">
        #movieTemplateContainer div
        {
            width:400px;
            padding: 10px;
            margin: 10px;
            border: black solid 1px;
        }
    </style>
</head>
Start Up Page and Template Result Page

<body>
<label>Search Movies:</label>
<input id="movieName" size="50" />
<button id="btnLookup">Lookup</button>

<div id="movieTemplateContainer"></div>

<script id="movieTemplate" type="text/html">
  <div>
     <img src="${BoxArt.LargeUrl}" />
     <strong>${Name}</strong>
    <br/>
    <button id="playButton" movieID=${NetflixApiId}
      onclick="play(this)">Play Now</button>
    <p>
     {{html Synopsis}}
     </p>
  </div>
</script>
<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="Scripts/jquery.tmpl.js"></script>
Make JSONP Call
<script type="text/javascript">
  $("#btnLookup").click(function () {

    // Build OData query
    var movieName = $("#movieName").val();
    var query = "http://odata.netflix.com/Catalog" // netflix base url
                   + "/Titles" // top-level resource
       + "?$filter=substringof('" + escape(movieName) + "',Name)" //filter by movie name
       + "&$callback=callback" // jsonp request
       + "&$format=json"; // json request
    // Make JSONP call to Netflix
  $.ajax({
        dataType: "jsonp",
        url: query,
        jsonpCallback: "callback",
        success: callback
        });
    });
Callback and Template

<div id="movieTemplateContainer"></div>
                                                    function callback(result) {
<script id="movieTemplate" type="text/html">         // unwrap result
  <div>                                              var movies = result.d.results;
      <img src="${BoxArt.LargeUrl}" />
     <strong>${Name}</strong>                         $("#movieTemplateContainer")
     <br/>                                       .empty();
     <button id="playButton" movieID=${Netflix        $("#movieTemplate").tmpl(mov
ApiId} onclick="play(this)">Play Now</button>    ies).appendTo("#movieTemplateCon
    <p>                                          tainer");
     {{html Synopsis}}                             }
     </p>
  </div>
</script>
Netflix Movie Play
  function play(mvInfo) {
    var id = $(mvInfo).attr("movieID").substring(45);
     javascript: nflx.openPlayer('http://api.netflix.com/cat
alog/movie/'+id, 0, 0, ‘YOUR NETFLIX DEVELOPER ACCOUNT
KEY');
   }
</script>
<script src="http://jsapi.netflix.com/us/api/js/api.js"></sc
ript>

</body>
Agenda
• Essentials of jQuery
• New jQuery Plugins: Templates, DataLink,
  Globalization
• Working with OData, JSONP, Netflix
• Working with Web Services, Database and
  OData
• Summary
Favorite Movie Site Overview




Insert Data into Database




                            Displaying Movie List
Key Steps: Insert Data into Database
• Create ADO.NET Entity Data Model based on the
  DB
• Approach 1: Using generic handler
  – low-level approach to interacting with .NET through
    jQuery
  – Simple, just need jQuery library
• Approach 2: Using Ajax-enabled WCF Service
  – a little more work as need to serialize objects into JSON
• Approach 3 Using OData (WCF Data Service)
  – Taking advantage of open standards such as REST, JSON,
    and OData
  – The OData protocol (WCF Data Services) works very
    nicely with Ajax
     • quickly expose database data to an Ajax application
Create a Data Model
Approach 1: Using Generic Handler
Generic Handler                             Default.htm
public class InsertMovie : IHttpHandler {      <script
    private MoviesDBEntities                   type="text/javascript">
_dataContext = new
MoviesDBEntities();                              $("#btnAdd").click(functi
    public void                                on () {
ProcessRequest(HttpContext context) {
       // Extract form fields                        $.post("InsertMovie.as
           …                                   hx", $("form").serialize(),
       // Create movie to insert               insertCallback);
       var movieToInsert = new Movie {           });
…};
       // Save new movie to DB                   function
       _dataContext.AddToMovies(movie          insertCallback(result) {
ToInsert);                                       …
       _dataContext.SaveChanges();
      … }
                                                 }
}                                              </script>
Approach 2: Using Ajax-enabled WCF
                       Service
    WCF Service                                           Default.htm
[ServiceBehavior(IncludeExceptionDetailInFaults=true)]     <script type="text/javascript">
  [ServiceContract(Namespace = "")]                         $("#btnAdd").click(function () {
                                                               // Convert the form into an object
  [AspNetCompatibilityRequirements(RequirementsMode
= AspNetCompatibilityRequirementsMode.Allowed)]                var data = { title: $("#title").val(),
                                                          director: $("#director").val() };
  public class MovieService {                                  // JSONify the data
    private MoviesDBEntities _dataContext = new                data = JSON.stringify(data);
MoviesDBEntities();                                            // Post it
    [OperationContract]                                        $.ajax({
    public bool Insert(string title, string director) {            type: "POST",
      // Create movie to insert                                    contentType: "application/json;
                                                          charset=utf-8",
      var movieToInsert = new Movie { …};
                                                                   url: "MovieService.svc/Insert",
         // Save new movie to DB                                   data: data,
_dataContext.AddToMovies(movieToInsert);                           dataType: "json",
     _dataContext.SaveChanges();                                   success: insertCallback
         // Return movie (with primary key)                    });
         return true;                                       }); …
    }}                                                    </script>
Approach 3: Create OData Service
Approach 3: Insert Data Using OData
                      Service
Create WCF Data Service (OData                            AddMovie.aspx
Service)                                                $("#btnAdd").click(function () {
public class MovieService : DataService<Movies               // Convert the form into an object
Entities>                                                    var data1 = { Title: $("#title1").val(), Genre: $("#g
   {// This method is called only once to initialize   enre").val(), ImageURL: $("#imageUrl").val() };
 service-wide policies.                                     // JSONify the data
      public static void InitializeService(DataServi         var data = JSON.stringify(data1);
ceConfiguration config)                                     // Post it
      {// TODO: set rules to indicate which entity           $.ajax({
sets and service operations are visible, updatabl                type: "POST",
e, etc.                                                          contentType: "application/json; charset=utf-8",
         // Examples:                                            url: "/MovieService.svc/Movies",
         config.SetEntitySetAccessRule("Movies",                 data: data,
EntitySetRights.All);                                            dataType: "json",
         // config.SetServiceOperationAccessRule(                success: insertCallback
"MyServiceOperation", ServiceOperationRights.                });
All);                                                      });
         config.DataServiceBehavior.MaxProtocolV          function insertCallback(result) {
ersion = DataServiceProtocolVersion.V2;                          var newMovie = result["d"];
      }                                                      // Show primary key
   }                                                         alert("Movie added with primary key " + newMov
                                                       ie.MovieID); }
Display Favorite Movies
• Retrieving movie list from OData
  – Approach 1: using jQuery and jQuery Plugin
    templates to create a table with pagination
  – Approach 2: using jQuery, jQuery Plugin templates
    and Element Stack Plugin to create a fun Movie list
     • http://www.marcofucci.com/tumblelog/15/mar/2010/
       elementstack_v1-1/
Agenda
• Essentials of jQuery
• New jQuery Plugins: Templates, DataLink,
  Globalization
• Working with OData, JSONP, Netflix
• Working with Web Services, Database and
  OData
• Summary
Summary
• jQuery is easy to learn and use
  – jQuery plugins, jQuery UI
• Microsoft is contributing to jQuery project
• jQuery works well with OData
  – Easy to produce and consume OData
  – ADO.NET Entity Data Model, WCF Data Service
    easy to generate
Resources
• jquery.com Downloading
• api.jquery.com Documentation
• forum.jquery.com Community
• meetups.jquery.com Local Community
• plugins.jquery.com Extending
• jqueryui.com UI Widgets and Effects
• odata.org OData Services
jQuery Makes Writing JavaScript
Fun Again

 Doris Chen Ph.D.
 doris.chen@microsoft.com
 Developer Evangelist
 Microsoft
 http://blogs.msdn.com/b/dorischen/

More Related Content

Viewers also liked

The Tale of 2 CLIs - Ember-cli and Angular-cli
The Tale of 2 CLIs - Ember-cli and Angular-cliThe Tale of 2 CLIs - Ember-cli and Angular-cli
The Tale of 2 CLIs - Ember-cli and Angular-cliTracy Lee
 
Html5 Fit: Get Rid of Love Handles
Html5 Fit:  Get Rid of Love HandlesHtml5 Fit:  Get Rid of Love Handles
Html5 Fit: Get Rid of Love HandlesChris Love
 
Silicon Valley Code Camp 2016 - MongoDB in production
Silicon Valley Code Camp 2016 - MongoDB in productionSilicon Valley Code Camp 2016 - MongoDB in production
Silicon Valley Code Camp 2016 - MongoDB in productionDaniel Coupal
 
Build Cross Platform Mobile Apps for iOS & Android with Xamarin & MvvmCross
Build Cross Platform Mobile Apps for iOS & Android with Xamarin & MvvmCrossBuild Cross Platform Mobile Apps for iOS & Android with Xamarin & MvvmCross
Build Cross Platform Mobile Apps for iOS & Android with Xamarin & MvvmCrossIshai Hachlili
 
ES6 PPT FOR 2016
ES6 PPT FOR 2016ES6 PPT FOR 2016
ES6 PPT FOR 2016Manoj Kumar
 
Introduction to Big Data
Introduction to Big DataIntroduction to Big Data
Introduction to Big DataMohammed Guller
 

Viewers also liked (8)

The Tale of 2 CLIs - Ember-cli and Angular-cli
The Tale of 2 CLIs - Ember-cli and Angular-cliThe Tale of 2 CLIs - Ember-cli and Angular-cli
The Tale of 2 CLIs - Ember-cli and Angular-cli
 
Html5 Fit: Get Rid of Love Handles
Html5 Fit:  Get Rid of Love HandlesHtml5 Fit:  Get Rid of Love Handles
Html5 Fit: Get Rid of Love Handles
 
Silicon Valley Code Camp 2016 - MongoDB in production
Silicon Valley Code Camp 2016 - MongoDB in productionSilicon Valley Code Camp 2016 - MongoDB in production
Silicon Valley Code Camp 2016 - MongoDB in production
 
Build Cross Platform Mobile Apps for iOS & Android with Xamarin & MvvmCross
Build Cross Platform Mobile Apps for iOS & Android with Xamarin & MvvmCrossBuild Cross Platform Mobile Apps for iOS & Android with Xamarin & MvvmCross
Build Cross Platform Mobile Apps for iOS & Android with Xamarin & MvvmCross
 
ES6 PPT FOR 2016
ES6 PPT FOR 2016ES6 PPT FOR 2016
ES6 PPT FOR 2016
 
Angular2
Angular2Angular2
Angular2
 
React js
React jsReact js
React js
 
Introduction to Big Data
Introduction to Big DataIntroduction to Big Data
Introduction to Big Data
 

More from Doris Chen

Practical tipsmakemobilefaster oscon2016
Practical tipsmakemobilefaster oscon2016Practical tipsmakemobilefaster oscon2016
Practical tipsmakemobilefaster oscon2016Doris Chen
 
Building Web Sites that Work Everywhere
Building Web Sites that Work EverywhereBuilding Web Sites that Work Everywhere
Building Web Sites that Work EverywhereDoris Chen
 
Angular mobile angular_u
Angular mobile angular_uAngular mobile angular_u
Angular mobile angular_uDoris Chen
 
Lastest Trends in Web Development
Lastest Trends in Web DevelopmentLastest Trends in Web Development
Lastest Trends in Web DevelopmentDoris Chen
 
Angular or Backbone: Go Mobile!
Angular or Backbone: Go Mobile!Angular or Backbone: Go Mobile!
Angular or Backbone: Go Mobile!Doris Chen
 
OSCON Presentation: Developing High Performance Websites and Modern Apps with...
OSCON Presentation: Developing High Performance Websites and Modern Apps with...OSCON Presentation: Developing High Performance Websites and Modern Apps with...
OSCON Presentation: Developing High Performance Websites and Modern Apps with...Doris Chen
 
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps FasterPractical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps FasterDoris Chen
 
Developing High Performance Websites and Modern Apps with JavaScript and HTML5
Developing High Performance Websites and Modern Apps with JavaScript and HTML5Developing High Performance Websites and Modern Apps with JavaScript and HTML5
Developing High Performance Websites and Modern Apps with JavaScript and HTML5Doris Chen
 
What Web Developers Need to Know to Develop Native HTML5/JS Apps
What Web Developers Need to Know to Develop Native HTML5/JS AppsWhat Web Developers Need to Know to Develop Native HTML5/JS Apps
What Web Developers Need to Know to Develop Native HTML5/JS AppsDoris Chen
 
Windows 8 Opportunity
Windows 8 OpportunityWindows 8 Opportunity
Windows 8 OpportunityDoris Chen
 
Wins8 appfoforweb fluent
Wins8 appfoforweb fluentWins8 appfoforweb fluent
Wins8 appfoforweb fluentDoris Chen
 
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Doris Chen
 
What Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 AppsWhat Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 AppsDoris Chen
 
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Doris Chen
 
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3Doris Chen
 
Introduction to CSS3
Introduction to CSS3Introduction to CSS3
Introduction to CSS3Doris Chen
 
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Doris Chen
 
Practical HTML5: Using It Today
Practical HTML5: Using It TodayPractical HTML5: Using It Today
Practical HTML5: Using It TodayDoris Chen
 
HTML 5 Development for Windows Phone and Desktop
HTML 5 Development for Windows Phone and DesktopHTML 5 Development for Windows Phone and Desktop
HTML 5 Development for Windows Phone and DesktopDoris Chen
 
Dive into HTML5: SVG and Canvas
Dive into HTML5: SVG and CanvasDive into HTML5: SVG and Canvas
Dive into HTML5: SVG and CanvasDoris Chen
 

More from Doris Chen (20)

Practical tipsmakemobilefaster oscon2016
Practical tipsmakemobilefaster oscon2016Practical tipsmakemobilefaster oscon2016
Practical tipsmakemobilefaster oscon2016
 
Building Web Sites that Work Everywhere
Building Web Sites that Work EverywhereBuilding Web Sites that Work Everywhere
Building Web Sites that Work Everywhere
 
Angular mobile angular_u
Angular mobile angular_uAngular mobile angular_u
Angular mobile angular_u
 
Lastest Trends in Web Development
Lastest Trends in Web DevelopmentLastest Trends in Web Development
Lastest Trends in Web Development
 
Angular or Backbone: Go Mobile!
Angular or Backbone: Go Mobile!Angular or Backbone: Go Mobile!
Angular or Backbone: Go Mobile!
 
OSCON Presentation: Developing High Performance Websites and Modern Apps with...
OSCON Presentation: Developing High Performance Websites and Modern Apps with...OSCON Presentation: Developing High Performance Websites and Modern Apps with...
OSCON Presentation: Developing High Performance Websites and Modern Apps with...
 
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps FasterPractical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
 
Developing High Performance Websites and Modern Apps with JavaScript and HTML5
Developing High Performance Websites and Modern Apps with JavaScript and HTML5Developing High Performance Websites and Modern Apps with JavaScript and HTML5
Developing High Performance Websites and Modern Apps with JavaScript and HTML5
 
What Web Developers Need to Know to Develop Native HTML5/JS Apps
What Web Developers Need to Know to Develop Native HTML5/JS AppsWhat Web Developers Need to Know to Develop Native HTML5/JS Apps
What Web Developers Need to Know to Develop Native HTML5/JS Apps
 
Windows 8 Opportunity
Windows 8 OpportunityWindows 8 Opportunity
Windows 8 Opportunity
 
Wins8 appfoforweb fluent
Wins8 appfoforweb fluentWins8 appfoforweb fluent
Wins8 appfoforweb fluent
 
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
 
What Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 AppsWhat Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 Apps
 
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
 
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
 
Introduction to CSS3
Introduction to CSS3Introduction to CSS3
Introduction to CSS3
 
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
 
Practical HTML5: Using It Today
Practical HTML5: Using It TodayPractical HTML5: Using It Today
Practical HTML5: Using It Today
 
HTML 5 Development for Windows Phone and Desktop
HTML 5 Development for Windows Phone and DesktopHTML 5 Development for Windows Phone and Desktop
HTML 5 Development for Windows Phone and Desktop
 
Dive into HTML5: SVG and Canvas
Dive into HTML5: SVG and CanvasDive into HTML5: SVG and Canvas
Dive into HTML5: SVG and Canvas
 

Recently uploaded

Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Jeffrey Haguewood
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...Karmanjay Verma
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 

Recently uploaded (20)

Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 

jQuery Makes Writing JavaScript Fun Again

  • 1. jQuery Makes Writing JavaScript Fun Again Doris Chen Ph.D. Developer Evangelist Microsoft http://blogs.msdn.com/b/dorischen/
  • 2. Who am I? • Developer Evangelist at Microsoft based in Silicon Valley, CA – Blog: http://blogs.msdn.com/b/dorischen/ – Twitter @doristchen – Email: doris.chen@microsoft.com • Has over 13 years of experience in the software industry focusing on web technologies • Spoke and published widely at JavaOne, O'Reilly, SD West, SD Forum and worldwide User Groups meetings • Before joining Microsoft, Doris Chen was a Technology Evangelist at Sun Microsystems • Doris received her Ph.D. from the University of California at Los Angeles (UCLA)
  • 3. Agenda • Essentials of jQuery • New jQuery Plugins: Templates, DataLink, Globalization • Working with OData, JSONP, Netflix • Working with Web Services, Database and OData • Summary
  • 4. What is AJAX? • Ajax= acronym for: > Asynchronous JavaScript And XML(or XMLHTTPRequest ) • Browser client uses JavaScript to Asynchronously get data from a server and update page dynamically without refreshing the whole page • More interactive user experience
  • 5. Traditional Web AJAX within a browser, there is AJAX engine
  • 6. “Naked” Ajax is too complex • A lot of JavaScript programming involved > “It is buggy and broken” > “Used for annoying people” > Difficult to debug and maintain > ... • You need a deep understanding of Ajax techniques • Have to handle all XmlHttpRequest interactions yourself • Have to handle cross browser inconsistence yourself
  • 7. Solutions • JavaScript Toolkits > Wrap up ajax details in javascript libraries > jQuery, Dojo, prototype+scriptaculous, Yahoo,...
  • 9. What is jQuery? • Created by John Resig and first announced Jan 2006 at BarCampNYC • Most popular JavaScript library in use today > simplifies the interaction between HTML and JavaScript • Free, open source (MIT, GPL) • Cross Browser > IE6+, FF2+, Sarari 3+, Chrome, Opera 9+ • Find it at http://jquery.com • It’s a joy to use
  • 10. Why jQuery ? • Cross-browser compatibility • Fast & Small – 24KB in size (Minified and Gzipped) – Core is minimum and add Plugins when • Short Learning curve & Great Documentation • Tons of Plug-in: jQuery plugin repository • CSS3 Selectors Compliant • Helpful Utilities – string trimming, easily extend objects, iteration, array manipulation, support function • jQuery UI: jQuery User Interface • Widespread Adoption – Google, Microsoft, Amazon, Twitter, Dell, Mozilla, Wordpress & Drupal, HP, IBM, Intel, Ruby on Rails
  • 11. Getting Start • Download jQuery at jquery.com – <script type="text/javascript" src="/js/jQuery. js"></script> • Microsoft CDN or Google CDN – <script src="http://ajax.microsoft.com/ajax/jquery/jquery- 1.4.2.js" type="text/javascript"></script> – <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jqu ery.js"></script>
  • 12. jQuery Philosophy Find someone Do something to from HTML it (selector) (method)
  • 13. Focus of jQuery • Find someone in HTML and do something $(“div”).addClass(“header”) • JQuery object > Commonly used “$” > Can also named “jQuery” jQuery(“div”).addClass(“header”)
  • 14. Find Someone: Selector • CSS Style – $(“#myID”) // by id – $(“.myClass”) // by class name – $(“myTag”) // by tag (element name) – $(“#id, .class, tag”) // multiple • Hierarchy – $("form input") // descendant – $("#main > *") // child – $("#prev ~ div") // sibling • Form – $("form :radio") – $("#dvMainForm :checkbox") – $("input:disabled")
  • 15. Do something with the found elements • Attributes get/set • Manipulation • Events • Effects • AJAX
  • 16. Attribute • $("em").attr("title") • $("label").html() Get • $("p:first").text() • $("input").val() • $("em").attr("title", "zupzip") • $("label").html("zupzip") Set • $("p:first").text("zupzip") • $("input").val("zupzip")
  • 17. Manipulation • Apply css style dynamically – $(“#target”).addClass(“css_class”); • Toggle css style – $(“#target”).toggleClass(“css_class”); • Append – $("p").append("<strong>Hello</strong>"); • appendTo – $("span").appendTo("#foo"); • prepend &prependTo • after – $("p").after("<b>Hello</b>"); • before – $("p").before("<b>Hello</b>"); Manipulations Demo
  • 18. Events • click, hover, change.... $(“#target”).click(function(){....}); • bind $(“#target”).bind(“click”, function(){....}); • Chain event handlers $(“#target”).click(....).hover(...); Events Demo
  • 19. Effects • Show and Hide – $(“#target”).show() – $(“#target”).hide() • Fade in and out – $(“#target”).fadein() – $(“#target”).fadeout() • Slide up and down – $(“#target”).slideup() – $(“#target”).slidedown() • Custom animation Animation Demo
  • 20. AJAX • load(url, [data], callback) > $(„#myContainer‟).load(„home/myHtmlSnippet‟); • $.get(url, [data], callback) • $.post(url, [data], callback) • $.ajax(options) > $.ajax({ type : “GET” url : “url” data : data success : callback });
  • 21. jQuery Stack & Chaining $(‘body’) // [body] .find(‘p’) // [p, p, p] > [body] .find(‘a’) // [a, a] > [p, p, p] > [body] .addClass(‘foo’) .end() // [p, p, p] > [body] .end() // [body] 21
  • 22. jQuery Stack & Chaining $(‘tr’) //get all rows .filter(‘:odd’) //get all odd rows .addClass(‘myOddClass’) .end() //back to all rows .filter(‘:even’) //get all even rows .addClass(‘myEvenClass’); 22
  • 23. Agenda • Essentials of jQuery • New jQuery Plugins: Templates, DataLink, Globalization • Working with OData, JSONP, Netflix • Working with Web Services, Database and OData • Summary
  • 24. Microsoft is Contributing to jQuery Library • jQuery Templates plugin, Data Link plugin, and Globalization plugin have been accepted as officially supported plugins of the jQuery project – jQuery Templates (with jQuery 1.4.2) and Datalink plugins (with jQuery 1.4.3) will be managed by the jQuery Core team – jQuery Globalization plugin will become part of the jQuery UI project – jQuery Templates plugin will be part of jQuery Core library 1.5 • API Documentation – jQuery Templates http://api.jquery.com/category/plugins/templates/ – jQuery Data Link– http://api.jquery.com/category/plugins/data-link/ – jQuery Globalization– Available soon • Download – jQuery Templates – http://github.com/jquery/jquery-tmpl – jQuery Datalink – http://github.com/jquery/jquery-datalink – jQuery Globalization – http://github.com/jquery/jquery-global • Full product support for jQuery – Ship with Visual Studio with Great Intellisense support
  • 25. Templates Plugin (jQuery 1.4.2) • create client templates – e.g. format a set of database records from the server through an Ajax request <body> <ul id="movieList"></ul> <script id="movieTemplate" type="text/x-jquery-tmpl"> <li><b>${Name}</b> (${ReleaseYear})</li> </script> <script src="http://code.jquery.com/jquery-latest.min.js"></script> <script src="http://nje.github.com/jquery-tmpl/jquery.tmpl.js"></script> <script> var movies = [ { Name: "The Red Violin", ReleaseYear: "1998" }, { Name: "Eyes Wide Shut", ReleaseYear: "1999" }, { Name: "The Inheritance", ReleaseYear: "1976" } ]; $( "#movieTemplate" ).tmpl( movies ) .appendTo( "#movieList" ); </script> </body>
  • 26. Datalink Plugin (jQuery 1.4.3) • Easily keep user interface and data synchronized – automatically synchronize the input fields of a form with the properties of JavaScript product object <script src="http://github.com/nje/jquery- datalink/raw/e3e3be4312c9b224a8d9b25031f4ac876e4f70fd/jquery.js"></script> <script src="http://github.com/nje/jquery-datalink/raw/master/jQuery.datalink.js"></script> <form> <div> First Name: <input type="text" name="firstName" /> </div></form> person.firstName: <span id="objFirst"></span><br/> <script> var person = {}; $("form").link(person); // Chain link the person object to these elements to show the results $("#objFirst").link(person, { firstName: { name: "objFirst", convertBack: function (value, source, target) { $(target).text(value); } } }); $(person).data("firstName", "John"); </script>
  • 27. Globalization Plugin (jQuery 1.4.2) • enables you to use different cultural conventions • formatting or parsing numbers, dates and times, calendars, and currencies • has information on over 350 cultures • can use this plugin with the core jQuery library or plugins built on top of the jQuery library
  • 28. Agenda • Essentials of jQuery • New jQuery Plugins: Templates, DataLink, Globalization • Working with OData, JSONP, Netflix • Working with Web Services, Database and OData • Summary
  • 29. Develop Netflix Movie Search Application using jQuery, OData, JSONP and Netflix Technologies JSONP Ajax Call OData Query http://odata.netflix.com/Catalo g/Titles?$filter=Name%20eq%2 Netflix OData 0'Star%20Trek' Provider OData in JSON Callback Render on jQuery Template
  • 30. OData • Web protocol for querying and updating data • Uniform way of representing structured data – Atom, JSON formats • Uniform URL conventions – Navigation, filtering, sorting, paging, etc. • /Bookmarks?$orderby=Name //sorting • /Bookmarks?$top=10&$skip=30 //paging • Uniform operations – Addressability – GET, POST, PUT, DELETE • http://www.odata.org/
  • 32. Netflix OData in Feeder Reading View
  • 33. Netflix OData Diagram Query String http://odata.netflix.com/Catalog/Titles?$filter =Name%20eq%20'Star%20Trek'
  • 34. Key Steps • Start with an empty HTML page • Define style or you can put it in a css file • Develop start up page • Define the template of the response page • Compose the JSONP call • Implement callback routine and using jQuery template – Microsoft has contributed jQuery template jquery.tmpl.js to jQuery project and it will be part jQuery in next release. • Implement movie play using Netflix API – You need to apply a Netflix Developer API account and get the key. – More information http://developer.netflix.com/
  • 35. Style <head> <title>Search Movies</title> <style type="text/css"> #movieTemplateContainer div { width:400px; padding: 10px; margin: 10px; border: black solid 1px; } </style> </head>
  • 36. Start Up Page and Template Result Page <body> <label>Search Movies:</label> <input id="movieName" size="50" /> <button id="btnLookup">Lookup</button> <div id="movieTemplateContainer"></div> <script id="movieTemplate" type="text/html"> <div> <img src="${BoxArt.LargeUrl}" /> <strong>${Name}</strong> <br/> <button id="playButton" movieID=${NetflixApiId} onclick="play(this)">Play Now</button> <p> {{html Synopsis}} </p> </div> </script> <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="Scripts/jquery.tmpl.js"></script>
  • 37. Make JSONP Call <script type="text/javascript"> $("#btnLookup").click(function () { // Build OData query var movieName = $("#movieName").val(); var query = "http://odata.netflix.com/Catalog" // netflix base url + "/Titles" // top-level resource + "?$filter=substringof('" + escape(movieName) + "',Name)" //filter by movie name + "&$callback=callback" // jsonp request + "&$format=json"; // json request // Make JSONP call to Netflix $.ajax({ dataType: "jsonp", url: query, jsonpCallback: "callback", success: callback }); });
  • 38. Callback and Template <div id="movieTemplateContainer"></div> function callback(result) { <script id="movieTemplate" type="text/html"> // unwrap result <div> var movies = result.d.results; <img src="${BoxArt.LargeUrl}" /> <strong>${Name}</strong> $("#movieTemplateContainer") <br/> .empty(); <button id="playButton" movieID=${Netflix $("#movieTemplate").tmpl(mov ApiId} onclick="play(this)">Play Now</button> ies).appendTo("#movieTemplateCon <p> tainer"); {{html Synopsis}} } </p> </div> </script>
  • 39. Netflix Movie Play function play(mvInfo) { var id = $(mvInfo).attr("movieID").substring(45); javascript: nflx.openPlayer('http://api.netflix.com/cat alog/movie/'+id, 0, 0, ‘YOUR NETFLIX DEVELOPER ACCOUNT KEY'); } </script> <script src="http://jsapi.netflix.com/us/api/js/api.js"></sc ript> </body>
  • 40.
  • 41. Agenda • Essentials of jQuery • New jQuery Plugins: Templates, DataLink, Globalization • Working with OData, JSONP, Netflix • Working with Web Services, Database and OData • Summary
  • 42. Favorite Movie Site Overview Insert Data into Database Displaying Movie List
  • 43. Key Steps: Insert Data into Database • Create ADO.NET Entity Data Model based on the DB • Approach 1: Using generic handler – low-level approach to interacting with .NET through jQuery – Simple, just need jQuery library • Approach 2: Using Ajax-enabled WCF Service – a little more work as need to serialize objects into JSON • Approach 3 Using OData (WCF Data Service) – Taking advantage of open standards such as REST, JSON, and OData – The OData protocol (WCF Data Services) works very nicely with Ajax • quickly expose database data to an Ajax application
  • 44. Create a Data Model
  • 45. Approach 1: Using Generic Handler Generic Handler Default.htm public class InsertMovie : IHttpHandler { <script private MoviesDBEntities type="text/javascript"> _dataContext = new MoviesDBEntities(); $("#btnAdd").click(functi public void on () { ProcessRequest(HttpContext context) { // Extract form fields $.post("InsertMovie.as … hx", $("form").serialize(), // Create movie to insert insertCallback); var movieToInsert = new Movie { }); …}; // Save new movie to DB function _dataContext.AddToMovies(movie insertCallback(result) { ToInsert); … _dataContext.SaveChanges(); … } } } </script>
  • 46. Approach 2: Using Ajax-enabled WCF Service WCF Service Default.htm [ServiceBehavior(IncludeExceptionDetailInFaults=true)] <script type="text/javascript"> [ServiceContract(Namespace = "")] $("#btnAdd").click(function () { // Convert the form into an object [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] var data = { title: $("#title").val(), director: $("#director").val() }; public class MovieService { // JSONify the data private MoviesDBEntities _dataContext = new data = JSON.stringify(data); MoviesDBEntities(); // Post it [OperationContract] $.ajax({ public bool Insert(string title, string director) { type: "POST", // Create movie to insert contentType: "application/json; charset=utf-8", var movieToInsert = new Movie { …}; url: "MovieService.svc/Insert", // Save new movie to DB data: data, _dataContext.AddToMovies(movieToInsert); dataType: "json", _dataContext.SaveChanges(); success: insertCallback // Return movie (with primary key) }); return true; }); … }} </script>
  • 47. Approach 3: Create OData Service
  • 48. Approach 3: Insert Data Using OData Service Create WCF Data Service (OData AddMovie.aspx Service) $("#btnAdd").click(function () { public class MovieService : DataService<Movies // Convert the form into an object Entities> var data1 = { Title: $("#title1").val(), Genre: $("#g {// This method is called only once to initialize enre").val(), ImageURL: $("#imageUrl").val() }; service-wide policies. // JSONify the data public static void InitializeService(DataServi var data = JSON.stringify(data1); ceConfiguration config) // Post it {// TODO: set rules to indicate which entity $.ajax({ sets and service operations are visible, updatabl type: "POST", e, etc. contentType: "application/json; charset=utf-8", // Examples: url: "/MovieService.svc/Movies", config.SetEntitySetAccessRule("Movies", data: data, EntitySetRights.All); dataType: "json", // config.SetServiceOperationAccessRule( success: insertCallback "MyServiceOperation", ServiceOperationRights. }); All); }); config.DataServiceBehavior.MaxProtocolV function insertCallback(result) { ersion = DataServiceProtocolVersion.V2; var newMovie = result["d"]; } // Show primary key } alert("Movie added with primary key " + newMov ie.MovieID); }
  • 49. Display Favorite Movies • Retrieving movie list from OData – Approach 1: using jQuery and jQuery Plugin templates to create a table with pagination – Approach 2: using jQuery, jQuery Plugin templates and Element Stack Plugin to create a fun Movie list • http://www.marcofucci.com/tumblelog/15/mar/2010/ elementstack_v1-1/
  • 50. Agenda • Essentials of jQuery • New jQuery Plugins: Templates, DataLink, Globalization • Working with OData, JSONP, Netflix • Working with Web Services, Database and OData • Summary
  • 51. Summary • jQuery is easy to learn and use – jQuery plugins, jQuery UI • Microsoft is contributing to jQuery project • jQuery works well with OData – Easy to produce and consume OData – ADO.NET Entity Data Model, WCF Data Service easy to generate
  • 52. Resources • jquery.com Downloading • api.jquery.com Documentation • forum.jquery.com Community • meetups.jquery.com Local Community • plugins.jquery.com Extending • jqueryui.com UI Widgets and Effects • odata.org OData Services
  • 53. jQuery Makes Writing JavaScript Fun Again Doris Chen Ph.D. doris.chen@microsoft.com Developer Evangelist Microsoft http://blogs.msdn.com/b/dorischen/