1 / 24

RequireJS

RequireJS. Splitting JavaScript into Dependent Modules. Doncho Minkov. Telerik Software Academy. http:// academy.telerik.com. Senior Technical Trainer. http://minkov.it. Table of Contents. RequireJS Overview RequireJS configuration Defining modules with RequireJS

gerda
Download Presentation

RequireJS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. RequireJS Splitting JavaScript into Dependent Modules Doncho Minkov Telerik Software Academy http://academy.telerik.com Senior Technical Trainer http://minkov.it

  2. Table of Contents • RequireJS Overview • RequireJS configuration • Defining modules with RequireJS • Defining Dependent modules

  3. RequireJS Overview

  4. RequireJS Overview • RequireJS is a JavaScript file and module loader • It is optimized for in-browser use • Yet it can be used in other JavaScript environments, like Rhino and Node • Modular loaders improve the speed and quality of code • Inspire lazy-loading of JS files • Makes files dependent on other files

  5. Using RequireJS • Using RequireJS makes code more simpler and optimized • Instead of loading all the JavaScript files on the page load, load them when needed • RequireJS needs a configuration file to load other files • The config file is the single JavaScript file in the web page

  6. Using RequireJS (2) • RequireJS loads all code relative to a baseUrl • The url given in data-main • RequireJS assumes by default that all dependencies are scripts • Suffix ".js" is not expected

  7. RequireJS Config • The web page should load only the app config file: <!DOCTYPE html> <html> <head> <script data-main="scripts/app-config" src="Scripts/require.js"></script> </head> <body> … </body> </html> • App config loads the other JS files

  8. app-config • The app-config is the file, loading other files //app-config (function () { require.config({ paths: { "jquery": "libs/jquery-2.0.3" } }); require(["jquery"], function () { //write your jQuery-dependent code here }); }());

  9. app-config Live Demo

  10. Defining Modules

  11. Modules • A module is a well-scoped object that avoids polluting the global namespace • It can explicitly list its dependencies and get a handle on those dependencies • Dependencies are received as arguments to the define function • Modules in RequireJS are an extension of the Module Pattern

  12. Modules (2) • The RequireJS syntax for modules allows them to be loaded as fast as possible • Even out of order, yet evaluated in the correct dependency order • Since global variables are not created it is possible to load multiple versions of a module • There should only be one module definition in a single JavaScript file! • The modules can be grouped into optimized bundles by an optimization tool

  13. Defining Modules • Defining modules is done using the define function of RequireJS: • The name of the modules is the path of the file //in file "libs/module1.js" define(function(){ //do stuff return result; } define({ properties }); • Not all modules need dependencies • If no dependencies are needed, just pass a function handler or an object

  14. Defining Simple Modules Live Demo

  15. Defining Modules with Dependencies

  16. Defining Dependencies • Some modules use another modules • RequireJS can "request" a file to be loaded • Pass the names of the required module as an array in the define function • If any of them is not loaded, RequireJS will load it

  17. Defining Dependencies Live Demo

  18. RequireJS http://academy.telerik.com

  19. Homework • Create the following web services: • GET api/students - returns all students • Students have id, name and grade • GET api/students/{studentId}/marks- returns the marks of a student • Marks have subject and score • No need to use a database, xml file or any other kinds of data storage.You can use a regular array.

  20. Homework (2) • Using the web services develop a client application with two "pages" • On the first page show all students • The second page shows the marks of a student • Load the second page when a student from the first is clicked • Separate the application in the following modules: • HttpRequester - performs HTTP GET and HTTPPOST requests • DataPersister - uses HttpRequester to fetch data from the storage (the web services) • Controls - renders objects to HTML elements • Application - handles event handlings, page load, etc…

  21. Homework (2) • (cont.) Using the web services develop a client application with 2 "pages" • Use promises for the HTTP requests • You can use Q.js, RSVP.js or any other library • Use RequireJS to define and use your modules • Use mustache.js for templating the data • Use jQuery, prototype.js or native XmlHttpRequest to make the AJAX calls

  22. Homework (3) • Implement a ComboBox control (like a dropdown list) • The ComboBox holds a set of items (an array) • Initially only a single item, the selected item, is visible (the ComboBox is collapsed) • When the selected item is clicked, all other items are shown (the ComboBox is expanded) • If an item is clicked, it becomes the selected item and the ComboBox collapses • Each of the items in a ComboBox can contain any valid HTML code

  23. Homework (4) • (cont.) Implement a ComboBox control (like a dropdown list) • Use RequireJS and mustache.js • jQuery is not obligatory (use it if you will) • The ComboBox should have the following usage: var people = [ { id: 1, name: "Doncho Minkov", age: 18, avatarUrl: "images/minkov.jpg" }, { id: 2, name: "Georgi Georgiev", age: 19, avatarUrl: "images/joreto.jpg" }]; var comboBox = controls.ComboBox(people); var template = $("#person-template").html(); var comboBoxHtml = comboBox.render(template); container.innerHTML= comboBoxHtml; //sample template <div class="person-item" id="person-item-{{id}}"> <strong class="person-name">{{name}}</strong><p class="person-age">{{age}}</p> <img src="{{avatarUrl}}" width="100px" /> </div>

  24. Homework (5) • *Using the ComboBox from the previous task, add the following: • A way to attach to the expanding and collapsing of the ComboBox (onCollapsingand onExpanding events) • An event onSelectionChanged event, that fires when the selected item is changed • The onSelectionChanged event, must pass the new and the old selected HTML item

More Related