SlideShare a Scribd company logo
Sencha [ExtJS]: Object Oriented JavaScriptRohan Chandanewww.slideshare.net/rohan.chandane
NamespaceClassConstructorPropertiesMethods/ FunctionsObjectInheritanceObject Oriented Approach
Defining a namespace in Sencha (ExtJS) classgives unique name for the JavaScript Classhelps in organizing JavaScript codedeclaring namespace in ExtJS/ SenchaegExt.ns("com.company.app");Namespace
Two ways to write custom class in ExtJS1st wayClassExt.ns("com.company.app");(function(){       // class definition    var JSClass = Ext.extend(Object,{    .    .    })// end of class definition     com.company.app.JSClass = JSClass;})();
2nd wayContinued.. var com.company.app.JSClass = Ext.extend(Object,{    .    . })// end of class definition
ConstructorExt.ns("com.company.app");(function(){    varJSClass = Ext.extend(Object,{        //constructor function, this function will get 	         	//execute when object is created for the class    	constructor: function(config){        	//console.log("JSClass constructor");        	Ext.apply(this, config)    	}    .    .    })    com.company.app.JSClass = JSClass ;})();
Constructor, function, attributeExt.ns("com.company.app");(function(){    var JSClass = Ext.extend(Object,{        //constructor function        constructor: function(config){            //console.log("constructor called" );            Ext.apply(this, config)        },    	// attribute    	color: 'red',    	// some function    	moveBlock: function(newX, newY, myDiv1){        	    Ext.get(myDiv1).moveTo(newX, newY, true);	}    	.    })    com.company.app.JSClass = JSClass;})();
Create Object & Call a function// it need to include file JSClass.js in HTML, if it's // calling from HTML// create a object of the classvarobj = new com.company.app.JSClass();obj.moveBlock('0','-250','searchDiv');
InheritanceExt.ns("com.company.app");(function(){    varNewJSClass = Ext.extend(com.company.app.JSClass,{    .    .    .    })    com.company.app.NewJSClass = NewJSClass;})();
Using extended classExt.ns("com.company.app");(function(){    varNewJSClass = Ext.extend(com.company.app.JSClass ,{        color: 'blue',        constructor: function(config){            JSClass.superclass.constructor.apply(this, arguments)        },        // method override        moveBlock: function(newY, myDiv1){            Ext.get(myDiv1).moveTo(0, newY, true);        }    })    com.company.app.NewJSClass = NewJSClass;})();
Module Pattern: POJO like classExt.ns("com.company.app");(function(){    var JSClass = Ext.extend(Object,{        //constructor function    constructor: function(config){        Ext.apply(this, config)    }    // class variable    ,value1: null    ,value2: null    	// getter, setter    ,getValue1:function(){        return value1;    }    ,setValue1: function(val){        this.value1 = val;    }          })    com.company.app.JSClass = JSClass;})();
Ext.apply simply copies data members from a source object to a destination object and allows you to provide default valuesDefaults are optional, when there is defaults it does thisRun the next example in firebug, to understand it quicklyExt.apply()Syntax:Ext.apply(receivingObject, sendingObject, defaults)Ext.apply(receivingObject, defaults);Ext.apply(receivingObject, sendingObject);
Continued..var obj1 = {firstName: 'Rohan', lastName: 'Chandane'}console.log(obj1)//{firstName: 'Rohan', lastName: 'Chandane'}var obj2 = {job:'Dev', lang:'JavaScript', c: function(){}}console.log(obj2)// {job:'Dev', lang:'JavaScript' c: function(){}}var obj3 = Ext.apply(obj2, obj1, {newVar: 'new value'})console.log(obj3)// {firstName: 'Rohan', lastName: 'Chandane', job:'Dev', lang:'JavaScript' c: function(){}, newVar: 'new value'}// replacing job value herevar obj3 = Ext.apply(obj2, obj1, {job: 'new value'})console.log(obj3)// {firstName: 'Rohan', lastName: 'Chandane', job:'new value', lang:'JavaScript' c: function(){}}
Then what is the difference between Ext.apply() and Ext.extend()Ext.extend will inherit a superclass's data members and methods as well as add a superclass property and an override method.Ext.apply simply copies data membersContinued..
Modifying constructor in Module pattern to check Ext.apply()Adding console.log in JSClassto print configCreate object of JSClassclassContinued..constructor: function(config){Ext.apply(this, config);    console.log(this.newVar)}// creating object of JSClass (Module Pattern)var config = {varnewVar = “Rohan”}varnewObj = com.company.app.JSClass(config);// Rohan
Extras of OO JavaScript
JavaScript is dynamic object oriented languageProperties and Function can be added and removed at run timeFunction can be moved from one object to anotherExample:Continued..varobj = new Object();propertyName="firstName";propertyValue="Rohan";console.log(obj.firstName);// undefinedeval("obj ."+propertyName+"='"+propertyValue+"'");console.log(obj.firstName);// Rohandelete (obj.firstName)console.log(obj.firstName)// undefined
Basic Project Setup
Ajax application can be divided in two partAjax DeluxeApplications feel similar to a desktop appIts fully Ajax + JavaScript driven applicationScalable and for big applications Ajax LiteApplication/website feels more like a conventional web appAjax is used for small operations like validation with serverUseful only for small, quick functionalityWeb 2 App types
Here, lets take a look at Ajax Deluxe first Continued..
Project structureAppName||_lib|   |_com|   |   |_company|   |       |_myapp|   |            |_package1|   |                |_Main.js |   |            |_package2|   |_ext|       |_(Extracted ExtJS lib & folders)|       |_(...)||_assets|   |_css|   |_img||_Index.html
Index.htmlVersion 1:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html xmlns="http://www.w3.org/1999/xhtml">    <head>      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">    <title>Basic Setup</title>    <!-- Bring in the ExtJs Libraries and CSS -->    <link rel="stylesheet" type="text/css" href="lib/ext/resources/css/ext-all.css"/>    <script type="text/javascript" src="lib/ext/adapter/ext/ext-base.js"></script>    <script type="text/javascript" src="lib/ext/ext-all.js"></script>          <!-- Place the page specific js here -->       <script type="text/javascript">             Ext.onReady(function(){            // Mandatory: need to add this spacer            Ext.BLANK_IMAGE_URL = 'lib/ext/resources/images/default/s.gif';            // alert message box to check if ExtJS loaded            Ext.MessageBox.alert("Hello Example","Hello, Rohan! ExtJS loaded successfully!");        });       </script>        </head>    <body></body></html>
Index.htmlVersion 2:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html xmlns="http://www.w3.org/1999/xhtml">    <head>      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">    <title>Basic Setup</title>    <!-- Bring in the ExtJs Libraries and CSS -->    <link rel="stylesheet" type="text/css" href="lib/ext/resources/css/ext-all.css"/>    <script type="text/javascript" src="lib/ext/adapter/ext/ext-base.js"></script>    <script type="text/javascript" src="lib/ext/ext-all.js"></script>          <!-- Place the page specific js here -->    <script type="text/javascript" src="lib/com/company/myapp/package1/Main.js "> </script>        </head>    <body></body></html>
Main.js Version 2:Ext.onReady(function(){    // Mandatory: need to add this spacer /*[relative path to..]*/    Ext.BLANK_IMAGE_URL = ‘lib/ext/resources/images/default/s.gif';    Ext.QuickTips.init();    // alert message box to check if ExtJS loaded    Ext.MessageBox.alert("Hello Example","Hello, Rohan! ExtJS loaded successfully!");});
Now, for creating a Ajax Deluxe App from our existing setupIt needs to use Border Layout (Viewport)We will edit Main.js and will add Ext.Viewport()As border layout has north, south, west, east & center region, We will add those using Ext.Panel()So Main.js will look like this -Continued..
Main.js with Ext.Viewport()Ext.onReady(function(){    // Mandatory: need to add this spacer /*[relative path to..]*/Ext.BLANK_IMAGE_URL = 'lib/ext/resources/images/default/s.gif';Ext.QuickTips.init();    // viewport panels varnorthPanel = new Ext.Panel({	id: 'north-panel', height : 50,region: 'north', border: false, title:'Top Panel'});varsouthPanel = new Ext.Panel({	id: 'south-panel', height : 200, region: 'south', title : 'South Panel', 	collapsible: true, collapsed: true});varwestPanel = new Ext.Panel({     	id: 'west-panel', layout: 'fit', width: 250, region: 'west', title: 	'Navigation', collapsible: true     });varcenterPanel = new Ext.Panel({     	region: 'center' ,layout: 'fit', title: 'Content Panel'     });// viewportnew Ext.Viewport({id: 'id-viewport'    ,layout : 'border'    ,items  : [northPanel,southPanel,westPanel,centerPanel]});});
Preview: using Viewport
Here is object oriented programming with JavaScriptWe will create View, ViewLayout.js Class, which will render this Border Layout.We will modify Main.js and will create ViewLayout.js in directory package2Add entry in Index.html for ViewLayout.js, Main.jsOO
Index.html<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">    <title>Basic Setup</title>    <!-- Bring in the ExtJs Libraries and CSS -->    <link rel="stylesheet" type="text/css" href="lib/ext/resources/css/ext-all.css"/>    <script type="text/javascript" src="lib/ext/adapter/ext/ext-base.js"></script>    <script type="text/javascript" src="lib/ext/ext-all.js"></script>   <!-- Place the page specific js here --><script type="text/javascript" src="lib/com/company/hello/package2/Main.js"></script>   <script type="text/javascript" src="lib/com/company/hello/package2/ViewLayout.js"> </script></head>
ViewLayout.jsExt.ns("com.company.hello.package2");(function(){varViewLayout = Ext.extend(Object,{        constructor: function(config){Ext.apply(this, config);        },        // creating page layout, code goes here        /* public */ createLayout: function(){        // viewport panels varnorthPanel = new Ext.Panel({	id: 'north-panel', height : 50,region: 'north', border: false, title:‘ Top Panel'});varsouthPanel = new Ext.Panel({	id: 'south-panel', height : 200, region: 'south', title : 'South Panel', collapsible: true, collapsed: true   });varwestPanel = new Ext.Panel({	id: 'west-panel', layout: 'fit', width: 250, region: 'west', title: 'Navigation',    collapsible: true   });varcenterPanel = new Ext.Panel({	region: 'center' ,layout: 'fit', title: 'Content Panel'});code continues..
Continued..        // viewport        new Ext.Viewport({            id: 'id-viewport'            ,layout : 'border'            ,items  : [northPanel, southPanel, westPanel, centerPanel]        });}    });    com.company.hello.package2.ViewLayout = ViewLayout;})();
Main.jsExt.onReady(function(){    // Mandatory: need to add this spacer /*[relative path to..]*/Ext.BLANK_IMAGE_URL = 'lib/ext/resources/images/default/s.gif';Ext.QuickTips.init();    // main execution start here, user defined functionvaronModuleLoad = function(){varviewLayout = new com.company.hello.package2.ViewLayout();viewLayout.createLayout();        }    // main starting pointonModuleLoad();});
Preview: using OO, ViewPort
Design Patterns with ExtJS
SingletonExt.ns("com.netapp.hello.package1");	(function() {varSingletonModel = Ext.extend(Object, {			_instance : null		,constructor : function() {			console.log("Singleton constructor called : " + this.getInstance());		}		,getInstance : function() {			if (this._instance === null) {this._instance = this.createInstance();			}			return this._instance;		}		,createInstance : function() {			return 10;		}	});	com.netapp.hello.package1.SingletonModel = SingletonModel;})()
ModuleExt.ns("com.netapp.hello.package1");	(function(){varModulePattern = Ext.extend(Object,{name:"Rohan"		,constructor:function(){			console.log("constrcutor");		},getName:function(){			this.name;		},setName:function(val){			this.name = val;		}	});	com.netapp.hello.package2.ModulePattern = ModulePattern;})()
Performance with ExtJS
Use reusable code Object Oriented Approach Modularize codeDo not access DOM frequentlyIts computational heavy codeUse Lazy loading, wherever possibleBut avoid heavy nesting Use of event delegationEvents should be assigned to a smaller subset of the document/element, rather than each individual element, this uses JavaScript’s event bubbling notion.  this approach takes less memory in browserContinued..
Use of JavaScript minification, obfuscaterYUI compressor, Linters  (jsonlint.com, jslint.com)Use of efficient programming practices in JavaScript Example: String manipulation - instead of string concatenation using ‘+’ operator, use of array’s .join() function, this way it will be better garbage collected.Cross Browser Scripting: using web standards, feature detection techniques instead browser detection technique and browser specific codeRemove listeners which are not in use anymoreContinued..
Loops are heavy, it can be optimized by using simple techniquesIn for loop, whenever reading length of array, store it in some variable instead of reading it again and again using array.lengthAvoid creating lot of HTML code with JavaScriptContinued..
I will update these notes periodically with my experiments, stay tuned..Note
Referenceshttp://www.jslog.comhttp://ajaxpatterns.orghttp://www.sencha.com/forum/http://edspencer.nethttp://code.google.com/p/v8/http://www.cherny.com/
Ad

Recommended

Extjs
Extjs
Girish Srivastava
 
ExtJs Basic Part-1
ExtJs Basic Part-1
Mindfire Solutions
 
Sencha ExtJs Learning Part 2 - MVC And MVVM Architecture in ExtJs [ENGLISH]
Sencha ExtJs Learning Part 2 - MVC And MVVM Architecture in ExtJs [ENGLISH]
Irfan Maulana
 
Sencha ExtJs Learning Part 1 - Layout And Container in Sencha ExtJs - By Irfa...
Sencha ExtJs Learning Part 1 - Layout And Container in Sencha ExtJs - By Irfa...
Irfan Maulana
 
How AngularJS Embraced Traditional Design Patterns
How AngularJS Embraced Traditional Design Patterns
Ran Mizrahi
 
Basics of Ext JS
Basics of Ext JS
ikhwanhayat
 
Angularjs
Angularjs
Vincenzo Ferrari
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran Mizrahi
Ran Mizrahi
 
WEB TECHNOLOGIES JavaScript
WEB TECHNOLOGIES JavaScript
Jyothishmathi Institute of Technology and Science Karimnagar
 
Learn javascript easy steps
Learn javascript easy steps
prince Loffar
 
Speed up your Web applications with HTML5 WebSockets
Speed up your Web applications with HTML5 WebSockets
Yakov Fain
 
RequireJS & Handlebars
RequireJS & Handlebars
Ivano Malavolta
 
Javascript Best Practices
Javascript Best Practices
Christian Heilmann
 
Page Object Model and Implementation in Selenium
Page Object Model and Implementation in Selenium
Zoe Gilbert
 
JavaScript Modules Done Right
JavaScript Modules Done Right
Mariusz Nowak
 
AspMVC4 start101
AspMVC4 start101
Rich Helton
 
AngularJs presentation
AngularJs presentation
Phan Tuan
 
Django design-patterns
Django design-patterns
Agiliq Info Solutions India Pvt Ltd
 
JavaScript 101
JavaScript 101
ygv2000
 
Rails Best Practices
Rails Best Practices
Wen-Tien Chang
 
Java Server Faces (JSF) - advanced
Java Server Faces (JSF) - advanced
BG Java EE Course
 
Java script tutorial
Java script tutorial
Doeun KOCH
 
Session 2- day 3
Session 2- day 3
Vivek Bhusal
 
Seven Versions of One Web Application
Seven Versions of One Web Application
Yakov Fain
 
Wt unit 4
Wt unit 4
team11vgnt
 
Jquery- One slide completing all JQuery
Jquery- One slide completing all JQuery
Knoldus Inc.
 
Developing components and extensions for ext js
Developing components and extensions for ext js
Mats Bryntse
 
Wt unit 3
Wt unit 3
team11vgnt
 
eXo SEA - JavaScript Introduction Training
eXo SEA - JavaScript Introduction Training
Hoat Le
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus Presentation
Ajax Experience 2009
 

More Related Content

What's hot (20)

WEB TECHNOLOGIES JavaScript
WEB TECHNOLOGIES JavaScript
Jyothishmathi Institute of Technology and Science Karimnagar
 
Learn javascript easy steps
Learn javascript easy steps
prince Loffar
 
Speed up your Web applications with HTML5 WebSockets
Speed up your Web applications with HTML5 WebSockets
Yakov Fain
 
RequireJS & Handlebars
RequireJS & Handlebars
Ivano Malavolta
 
Javascript Best Practices
Javascript Best Practices
Christian Heilmann
 
Page Object Model and Implementation in Selenium
Page Object Model and Implementation in Selenium
Zoe Gilbert
 
JavaScript Modules Done Right
JavaScript Modules Done Right
Mariusz Nowak
 
AspMVC4 start101
AspMVC4 start101
Rich Helton
 
AngularJs presentation
AngularJs presentation
Phan Tuan
 
Django design-patterns
Django design-patterns
Agiliq Info Solutions India Pvt Ltd
 
JavaScript 101
JavaScript 101
ygv2000
 
Rails Best Practices
Rails Best Practices
Wen-Tien Chang
 
Java Server Faces (JSF) - advanced
Java Server Faces (JSF) - advanced
BG Java EE Course
 
Java script tutorial
Java script tutorial
Doeun KOCH
 
Session 2- day 3
Session 2- day 3
Vivek Bhusal
 
Seven Versions of One Web Application
Seven Versions of One Web Application
Yakov Fain
 
Wt unit 4
Wt unit 4
team11vgnt
 
Jquery- One slide completing all JQuery
Jquery- One slide completing all JQuery
Knoldus Inc.
 
Developing components and extensions for ext js
Developing components and extensions for ext js
Mats Bryntse
 
Wt unit 3
Wt unit 3
team11vgnt
 
Learn javascript easy steps
Learn javascript easy steps
prince Loffar
 
Speed up your Web applications with HTML5 WebSockets
Speed up your Web applications with HTML5 WebSockets
Yakov Fain
 
Page Object Model and Implementation in Selenium
Page Object Model and Implementation in Selenium
Zoe Gilbert
 
JavaScript Modules Done Right
JavaScript Modules Done Right
Mariusz Nowak
 
AspMVC4 start101
AspMVC4 start101
Rich Helton
 
AngularJs presentation
AngularJs presentation
Phan Tuan
 
JavaScript 101
JavaScript 101
ygv2000
 
Java Server Faces (JSF) - advanced
Java Server Faces (JSF) - advanced
BG Java EE Course
 
Java script tutorial
Java script tutorial
Doeun KOCH
 
Seven Versions of One Web Application
Seven Versions of One Web Application
Yakov Fain
 
Jquery- One slide completing all JQuery
Jquery- One slide completing all JQuery
Knoldus Inc.
 
Developing components and extensions for ext js
Developing components and extensions for ext js
Mats Bryntse
 

Similar to Sencha / ExtJS : Object Oriented JavaScript (20)

eXo SEA - JavaScript Introduction Training
eXo SEA - JavaScript Introduction Training
Hoat Le
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus Presentation
Ajax Experience 2009
 
Introducing Struts 2
Introducing Struts 2
wiradikusuma
 
Silicon Valley CodeCamp 2008: High performance Ajax with ExtJS and ASP.NET
Silicon Valley CodeCamp 2008: High performance Ajax with ExtJS and ASP.NET
Mats Bryntse
 
Module design pattern i.e. express js
Module design pattern i.e. express js
Ahmed Assaf
 
JavaScript Basics
JavaScript Basics
Mats Bryntse
 
Java scriptforjavadev part2a
Java scriptforjavadev part2a
Makarand Bhatambarekar
 
Javascript
Javascript
mussawir20
 
Javascript Templating
Javascript Templating
bcruhl
 
Workshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testing
Visual Engineering
 
RomaFramework Tutorial Basics
RomaFramework Tutorial Basics
Luca Garulli
 
backend
backend
tutorialsruby
 
backend
backend
tutorialsruby
 
Introduction to Javascript
Introduction to Javascript
Amit Tyagi
 
Modern JavaScript Programming
Modern JavaScript Programming
Wildan Maulana
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLs
intelliyole
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
ipolevoy
 
Even Faster Web Sites at The Ajax Experience
Even Faster Web Sites at The Ajax Experience
Steve Souders
 
Javascript Design Patterns
Javascript Design Patterns
Zohar Arad
 
Xopus Application Framework
Xopus Application Framework
Jady Yang
 
eXo SEA - JavaScript Introduction Training
eXo SEA - JavaScript Introduction Training
Hoat Le
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus Presentation
Ajax Experience 2009
 
Introducing Struts 2
Introducing Struts 2
wiradikusuma
 
Silicon Valley CodeCamp 2008: High performance Ajax with ExtJS and ASP.NET
Silicon Valley CodeCamp 2008: High performance Ajax with ExtJS and ASP.NET
Mats Bryntse
 
Module design pattern i.e. express js
Module design pattern i.e. express js
Ahmed Assaf
 
Javascript Templating
Javascript Templating
bcruhl
 
Workshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testing
Visual Engineering
 
RomaFramework Tutorial Basics
RomaFramework Tutorial Basics
Luca Garulli
 
Introduction to Javascript
Introduction to Javascript
Amit Tyagi
 
Modern JavaScript Programming
Modern JavaScript Programming
Wildan Maulana
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLs
intelliyole
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
ipolevoy
 
Even Faster Web Sites at The Ajax Experience
Even Faster Web Sites at The Ajax Experience
Steve Souders
 
Javascript Design Patterns
Javascript Design Patterns
Zohar Arad
 
Xopus Application Framework
Xopus Application Framework
Jady Yang
 
Ad

More from Rohan Chandane (13)

Agile Maturity Model, Certified Scrum Master!
Agile Maturity Model, Certified Scrum Master!
Rohan Chandane
 
Agile & Scrum, Certified Scrum Master! Crash Course
Agile & Scrum, Certified Scrum Master! Crash Course
Rohan Chandane
 
An Introduction To Testing In AngularJS Applications
An Introduction To Testing In AngularJS Applications
Rohan Chandane
 
Agile :what i learnt so far
Agile :what i learnt so far
Rohan Chandane
 
Backbone js
Backbone js
Rohan Chandane
 
Node js
Node js
Rohan Chandane
 
TIBCO General Interface - CSS Guide
TIBCO General Interface - CSS Guide
Rohan Chandane
 
Blogger's Park Presentation (Blogging)
Blogger's Park Presentation (Blogging)
Rohan Chandane
 
J2ME GUI Programming
J2ME GUI Programming
Rohan Chandane
 
Parsing XML in J2ME
Parsing XML in J2ME
Rohan Chandane
 
J2ME RMS
J2ME RMS
Rohan Chandane
 
J2ME IO Classes
J2ME IO Classes
Rohan Chandane
 
Java2 MicroEdition-J2ME
Java2 MicroEdition-J2ME
Rohan Chandane
 
Agile Maturity Model, Certified Scrum Master!
Agile Maturity Model, Certified Scrum Master!
Rohan Chandane
 
Agile & Scrum, Certified Scrum Master! Crash Course
Agile & Scrum, Certified Scrum Master! Crash Course
Rohan Chandane
 
An Introduction To Testing In AngularJS Applications
An Introduction To Testing In AngularJS Applications
Rohan Chandane
 
Agile :what i learnt so far
Agile :what i learnt so far
Rohan Chandane
 
TIBCO General Interface - CSS Guide
TIBCO General Interface - CSS Guide
Rohan Chandane
 
Blogger's Park Presentation (Blogging)
Blogger's Park Presentation (Blogging)
Rohan Chandane
 
Java2 MicroEdition-J2ME
Java2 MicroEdition-J2ME
Rohan Chandane
 
Ad

Recently uploaded (20)

Assisting Individuals and Families to Promote and Maintain Health – Unit 7 | ...
Assisting Individuals and Families to Promote and Maintain Health – Unit 7 | ...
RAKESH SAJJAN
 
How to Manage Multi Language for Invoice in Odoo 18
How to Manage Multi Language for Invoice in Odoo 18
Celine George
 
Battle of Bookworms 2025 - U25 Literature Quiz by Pragya
Battle of Bookworms 2025 - U25 Literature Quiz by Pragya
Pragya - UEM Kolkata Quiz Club
 
Paper 108 | Thoreau’s Influence on Gandhi: The Evolution of Civil Disobedience
Paper 108 | Thoreau’s Influence on Gandhi: The Evolution of Civil Disobedience
Rajdeep Bavaliya
 
ROLE PLAY: FIRST AID -CPR & RECOVERY POSITION.pptx
ROLE PLAY: FIRST AID -CPR & RECOVERY POSITION.pptx
Belicia R.S
 
BINARY files CSV files JSON files with example.pptx
BINARY files CSV files JSON files with example.pptx
Ramakrishna Reddy Bijjam
 
Paper 107 | From Watchdog to Lapdog: Ishiguro’s Fiction and the Rise of “Godi...
Paper 107 | From Watchdog to Lapdog: Ishiguro’s Fiction and the Rise of “Godi...
Rajdeep Bavaliya
 
Sustainable Innovation with Immersive Learning
Sustainable Innovation with Immersive Learning
Leonel Morgado
 
ECONOMICS, DISASTER MANAGEMENT, ROAD SAFETY - STUDY MATERIAL [10TH]
ECONOMICS, DISASTER MANAGEMENT, ROAD SAFETY - STUDY MATERIAL [10TH]
SHERAZ AHMAD LONE
 
Chalukyas of Gujrat, Solanki Dynasty NEP.pptx
Chalukyas of Gujrat, Solanki Dynasty NEP.pptx
Dr. Ravi Shankar Arya Mahila P. G. College, Banaras Hindu University, Varanasi, India.
 
ABCs of Bookkeeping for Nonprofits TechSoup.pdf
ABCs of Bookkeeping for Nonprofits TechSoup.pdf
TechSoup
 
This is why students from these 44 institutions have not received National Se...
This is why students from these 44 institutions have not received National Se...
Kweku Zurek
 
Code Profiling in Odoo 18 - Odoo 18 Slides
Code Profiling in Odoo 18 - Odoo 18 Slides
Celine George
 
What is FIle and explanation of text files.pptx
What is FIle and explanation of text files.pptx
Ramakrishna Reddy Bijjam
 
Publishing Your Memoir with Brooke Warner
Publishing Your Memoir with Brooke Warner
Brooke Warner
 
ENGLISH_Q1_W1 PowerPoint grade 3 quarter 1 week 1
ENGLISH_Q1_W1 PowerPoint grade 3 quarter 1 week 1
jutaydeonne
 
YSPH VMOC Special Report - Measles Outbreak Southwest US 6-14-2025.pptx
YSPH VMOC Special Report - Measles Outbreak Southwest US 6-14-2025.pptx
Yale School of Public Health - The Virtual Medical Operations Center (VMOC)
 
LDMMIA Practitioner Student Reiki Yoga S2 Video PDF Without Yogi Goddess
LDMMIA Practitioner Student Reiki Yoga S2 Video PDF Without Yogi Goddess
LDM & Mia eStudios
 
Plate Tectonic Boundaries and Continental Drift Theory
Plate Tectonic Boundaries and Continental Drift Theory
Marie
 
University of Ghana Cracks Down on Misconduct: Over 100 Students Sanctioned
University of Ghana Cracks Down on Misconduct: Over 100 Students Sanctioned
Kweku Zurek
 
Assisting Individuals and Families to Promote and Maintain Health – Unit 7 | ...
Assisting Individuals and Families to Promote and Maintain Health – Unit 7 | ...
RAKESH SAJJAN
 
How to Manage Multi Language for Invoice in Odoo 18
How to Manage Multi Language for Invoice in Odoo 18
Celine George
 
Battle of Bookworms 2025 - U25 Literature Quiz by Pragya
Battle of Bookworms 2025 - U25 Literature Quiz by Pragya
Pragya - UEM Kolkata Quiz Club
 
Paper 108 | Thoreau’s Influence on Gandhi: The Evolution of Civil Disobedience
Paper 108 | Thoreau’s Influence on Gandhi: The Evolution of Civil Disobedience
Rajdeep Bavaliya
 
ROLE PLAY: FIRST AID -CPR & RECOVERY POSITION.pptx
ROLE PLAY: FIRST AID -CPR & RECOVERY POSITION.pptx
Belicia R.S
 
BINARY files CSV files JSON files with example.pptx
BINARY files CSV files JSON files with example.pptx
Ramakrishna Reddy Bijjam
 
Paper 107 | From Watchdog to Lapdog: Ishiguro’s Fiction and the Rise of “Godi...
Paper 107 | From Watchdog to Lapdog: Ishiguro’s Fiction and the Rise of “Godi...
Rajdeep Bavaliya
 
Sustainable Innovation with Immersive Learning
Sustainable Innovation with Immersive Learning
Leonel Morgado
 
ECONOMICS, DISASTER MANAGEMENT, ROAD SAFETY - STUDY MATERIAL [10TH]
ECONOMICS, DISASTER MANAGEMENT, ROAD SAFETY - STUDY MATERIAL [10TH]
SHERAZ AHMAD LONE
 
ABCs of Bookkeeping for Nonprofits TechSoup.pdf
ABCs of Bookkeeping for Nonprofits TechSoup.pdf
TechSoup
 
This is why students from these 44 institutions have not received National Se...
This is why students from these 44 institutions have not received National Se...
Kweku Zurek
 
Code Profiling in Odoo 18 - Odoo 18 Slides
Code Profiling in Odoo 18 - Odoo 18 Slides
Celine George
 
What is FIle and explanation of text files.pptx
What is FIle and explanation of text files.pptx
Ramakrishna Reddy Bijjam
 
Publishing Your Memoir with Brooke Warner
Publishing Your Memoir with Brooke Warner
Brooke Warner
 
ENGLISH_Q1_W1 PowerPoint grade 3 quarter 1 week 1
ENGLISH_Q1_W1 PowerPoint grade 3 quarter 1 week 1
jutaydeonne
 
LDMMIA Practitioner Student Reiki Yoga S2 Video PDF Without Yogi Goddess
LDMMIA Practitioner Student Reiki Yoga S2 Video PDF Without Yogi Goddess
LDM & Mia eStudios
 
Plate Tectonic Boundaries and Continental Drift Theory
Plate Tectonic Boundaries and Continental Drift Theory
Marie
 
University of Ghana Cracks Down on Misconduct: Over 100 Students Sanctioned
University of Ghana Cracks Down on Misconduct: Over 100 Students Sanctioned
Kweku Zurek
 

Sencha / ExtJS : Object Oriented JavaScript

  • 1. Sencha [ExtJS]: Object Oriented JavaScriptRohan Chandanewww.slideshare.net/rohan.chandane
  • 3. Defining a namespace in Sencha (ExtJS) classgives unique name for the JavaScript Classhelps in organizing JavaScript codedeclaring namespace in ExtJS/ SenchaegExt.ns("com.company.app");Namespace
  • 4. Two ways to write custom class in ExtJS1st wayClassExt.ns("com.company.app");(function(){   // class definition    var JSClass = Ext.extend(Object,{    .    .    })// end of class definition     com.company.app.JSClass = JSClass;})();
  • 5. 2nd wayContinued.. var com.company.app.JSClass = Ext.extend(Object,{    .    . })// end of class definition
  • 6. ConstructorExt.ns("com.company.app");(function(){    varJSClass = Ext.extend(Object,{        //constructor function, this function will get //execute when object is created for the class     constructor: function(config){         //console.log("JSClass constructor");         Ext.apply(this, config)     }    .    .    })    com.company.app.JSClass = JSClass ;})();
  • 7. Constructor, function, attributeExt.ns("com.company.app");(function(){    var JSClass = Ext.extend(Object,{        //constructor function     constructor: function(config){         //console.log("constructor called" );         Ext.apply(this, config)     },     // attribute     color: 'red',     // some function     moveBlock: function(newX, newY, myDiv1){         Ext.get(myDiv1).moveTo(newX, newY, true); }     .    })    com.company.app.JSClass = JSClass;})();
  • 8. Create Object & Call a function// it need to include file JSClass.js in HTML, if it's // calling from HTML// create a object of the classvarobj = new com.company.app.JSClass();obj.moveBlock('0','-250','searchDiv');
  • 9. InheritanceExt.ns("com.company.app");(function(){    varNewJSClass = Ext.extend(com.company.app.JSClass,{    .    .    .    })    com.company.app.NewJSClass = NewJSClass;})();
  • 10. Using extended classExt.ns("com.company.app");(function(){    varNewJSClass = Ext.extend(com.company.app.JSClass ,{        color: 'blue',        constructor: function(config){            JSClass.superclass.constructor.apply(this, arguments)        },        // method override        moveBlock: function(newY, myDiv1){            Ext.get(myDiv1).moveTo(0, newY, true);        }    })    com.company.app.NewJSClass = NewJSClass;})();
  • 11. Module Pattern: POJO like classExt.ns("com.company.app");(function(){    var JSClass = Ext.extend(Object,{        //constructor function    constructor: function(config){        Ext.apply(this, config)    }    // class variable    ,value1: null    ,value2: null     // getter, setter    ,getValue1:function(){     return value1;    }    ,setValue1: function(val){     this.value1 = val;    }          })    com.company.app.JSClass = JSClass;})();
  • 12. Ext.apply simply copies data members from a source object to a destination object and allows you to provide default valuesDefaults are optional, when there is defaults it does thisRun the next example in firebug, to understand it quicklyExt.apply()Syntax:Ext.apply(receivingObject, sendingObject, defaults)Ext.apply(receivingObject, defaults);Ext.apply(receivingObject, sendingObject);
  • 13. Continued..var obj1 = {firstName: 'Rohan', lastName: 'Chandane'}console.log(obj1)//{firstName: 'Rohan', lastName: 'Chandane'}var obj2 = {job:'Dev', lang:'JavaScript', c: function(){}}console.log(obj2)// {job:'Dev', lang:'JavaScript' c: function(){}}var obj3 = Ext.apply(obj2, obj1, {newVar: 'new value'})console.log(obj3)// {firstName: 'Rohan', lastName: 'Chandane', job:'Dev', lang:'JavaScript' c: function(){}, newVar: 'new value'}// replacing job value herevar obj3 = Ext.apply(obj2, obj1, {job: 'new value'})console.log(obj3)// {firstName: 'Rohan', lastName: 'Chandane', job:'new value', lang:'JavaScript' c: function(){}}
  • 14. Then what is the difference between Ext.apply() and Ext.extend()Ext.extend will inherit a superclass's data members and methods as well as add a superclass property and an override method.Ext.apply simply copies data membersContinued..
  • 15. Modifying constructor in Module pattern to check Ext.apply()Adding console.log in JSClassto print configCreate object of JSClassclassContinued..constructor: function(config){Ext.apply(this, config); console.log(this.newVar)}// creating object of JSClass (Module Pattern)var config = {varnewVar = “Rohan”}varnewObj = com.company.app.JSClass(config);// Rohan
  • 16. Extras of OO JavaScript
  • 17. JavaScript is dynamic object oriented languageProperties and Function can be added and removed at run timeFunction can be moved from one object to anotherExample:Continued..varobj = new Object();propertyName="firstName";propertyValue="Rohan";console.log(obj.firstName);// undefinedeval("obj ."+propertyName+"='"+propertyValue+"'");console.log(obj.firstName);// Rohandelete (obj.firstName)console.log(obj.firstName)// undefined
  • 19. Ajax application can be divided in two partAjax DeluxeApplications feel similar to a desktop appIts fully Ajax + JavaScript driven applicationScalable and for big applications Ajax LiteApplication/website feels more like a conventional web appAjax is used for small operations like validation with serverUseful only for small, quick functionalityWeb 2 App types
  • 20. Here, lets take a look at Ajax Deluxe first Continued..
  • 21. Project structureAppName||_lib|   |_com|   |   |_company|   |       |_myapp|   |            |_package1|   |                |_Main.js |   |            |_package2|   |_ext|       |_(Extracted ExtJS lib & folders)|       |_(...)||_assets|   |_css|   |_img||_Index.html
  • 22. Index.htmlVersion 1:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html xmlns="http://www.w3.org/1999/xhtml">    <head>      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">    <title>Basic Setup</title>    <!-- Bring in the ExtJs Libraries and CSS -->    <link rel="stylesheet" type="text/css" href="lib/ext/resources/css/ext-all.css"/>    <script type="text/javascript" src="lib/ext/adapter/ext/ext-base.js"></script>    <script type="text/javascript" src="lib/ext/ext-all.js"></script>          <!-- Place the page specific js here -->       <script type="text/javascript">             Ext.onReady(function(){            // Mandatory: need to add this spacer            Ext.BLANK_IMAGE_URL = 'lib/ext/resources/images/default/s.gif';            // alert message box to check if ExtJS loaded            Ext.MessageBox.alert("Hello Example","Hello, Rohan! ExtJS loaded successfully!");        });     </script>        </head>    <body></body></html>
  • 23. Index.htmlVersion 2:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html xmlns="http://www.w3.org/1999/xhtml">    <head>      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">    <title>Basic Setup</title>    <!-- Bring in the ExtJs Libraries and CSS -->    <link rel="stylesheet" type="text/css" href="lib/ext/resources/css/ext-all.css"/>    <script type="text/javascript" src="lib/ext/adapter/ext/ext-base.js"></script>    <script type="text/javascript" src="lib/ext/ext-all.js"></script>          <!-- Place the page specific js here -->    <script type="text/javascript" src="lib/com/company/myapp/package1/Main.js "> </script>        </head>    <body></body></html>
  • 24. Main.js Version 2:Ext.onReady(function(){    // Mandatory: need to add this spacer /*[relative path to..]*/    Ext.BLANK_IMAGE_URL = ‘lib/ext/resources/images/default/s.gif';    Ext.QuickTips.init();    // alert message box to check if ExtJS loaded    Ext.MessageBox.alert("Hello Example","Hello, Rohan! ExtJS loaded successfully!");});
  • 25. Now, for creating a Ajax Deluxe App from our existing setupIt needs to use Border Layout (Viewport)We will edit Main.js and will add Ext.Viewport()As border layout has north, south, west, east & center region, We will add those using Ext.Panel()So Main.js will look like this -Continued..
  • 26. Main.js with Ext.Viewport()Ext.onReady(function(){ // Mandatory: need to add this spacer /*[relative path to..]*/Ext.BLANK_IMAGE_URL = 'lib/ext/resources/images/default/s.gif';Ext.QuickTips.init(); // viewport panels varnorthPanel = new Ext.Panel({ id: 'north-panel', height : 50,region: 'north', border: false, title:'Top Panel'});varsouthPanel = new Ext.Panel({ id: 'south-panel', height : 200, region: 'south', title : 'South Panel', collapsible: true, collapsed: true});varwestPanel = new Ext.Panel({ id: 'west-panel', layout: 'fit', width: 250, region: 'west', title: 'Navigation', collapsible: true });varcenterPanel = new Ext.Panel({ region: 'center' ,layout: 'fit', title: 'Content Panel' });// viewportnew Ext.Viewport({id: 'id-viewport' ,layout : 'border' ,items : [northPanel,southPanel,westPanel,centerPanel]});});
  • 28. Here is object oriented programming with JavaScriptWe will create View, ViewLayout.js Class, which will render this Border Layout.We will modify Main.js and will create ViewLayout.js in directory package2Add entry in Index.html for ViewLayout.js, Main.jsOO
  • 29. Index.html<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Basic Setup</title> <!-- Bring in the ExtJs Libraries and CSS --> <link rel="stylesheet" type="text/css" href="lib/ext/resources/css/ext-all.css"/> <script type="text/javascript" src="lib/ext/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="lib/ext/ext-all.js"></script> <!-- Place the page specific js here --><script type="text/javascript" src="lib/com/company/hello/package2/Main.js"></script> <script type="text/javascript" src="lib/com/company/hello/package2/ViewLayout.js"> </script></head>
  • 30. ViewLayout.jsExt.ns("com.company.hello.package2");(function(){varViewLayout = Ext.extend(Object,{ constructor: function(config){Ext.apply(this, config); }, // creating page layout, code goes here /* public */ createLayout: function(){ // viewport panels varnorthPanel = new Ext.Panel({ id: 'north-panel', height : 50,region: 'north', border: false, title:‘ Top Panel'});varsouthPanel = new Ext.Panel({ id: 'south-panel', height : 200, region: 'south', title : 'South Panel', collapsible: true, collapsed: true });varwestPanel = new Ext.Panel({ id: 'west-panel', layout: 'fit', width: 250, region: 'west', title: 'Navigation', collapsible: true });varcenterPanel = new Ext.Panel({ region: 'center' ,layout: 'fit', title: 'Content Panel'});code continues..
  • 31. Continued.. // viewport new Ext.Viewport({ id: 'id-viewport' ,layout : 'border' ,items : [northPanel, southPanel, westPanel, centerPanel] });} }); com.company.hello.package2.ViewLayout = ViewLayout;})();
  • 32. Main.jsExt.onReady(function(){ // Mandatory: need to add this spacer /*[relative path to..]*/Ext.BLANK_IMAGE_URL = 'lib/ext/resources/images/default/s.gif';Ext.QuickTips.init(); // main execution start here, user defined functionvaronModuleLoad = function(){varviewLayout = new com.company.hello.package2.ViewLayout();viewLayout.createLayout(); } // main starting pointonModuleLoad();});
  • 35. SingletonExt.ns("com.netapp.hello.package1"); (function() {varSingletonModel = Ext.extend(Object, { _instance : null ,constructor : function() { console.log("Singleton constructor called : " + this.getInstance()); } ,getInstance : function() { if (this._instance === null) {this._instance = this.createInstance(); } return this._instance; } ,createInstance : function() { return 10; } }); com.netapp.hello.package1.SingletonModel = SingletonModel;})()
  • 38. Use reusable code Object Oriented Approach Modularize codeDo not access DOM frequentlyIts computational heavy codeUse Lazy loading, wherever possibleBut avoid heavy nesting Use of event delegationEvents should be assigned to a smaller subset of the document/element, rather than each individual element, this uses JavaScript’s event bubbling notion.  this approach takes less memory in browserContinued..
  • 39. Use of JavaScript minification, obfuscaterYUI compressor, Linters  (jsonlint.com, jslint.com)Use of efficient programming practices in JavaScript Example: String manipulation - instead of string concatenation using ‘+’ operator, use of array’s .join() function, this way it will be better garbage collected.Cross Browser Scripting: using web standards, feature detection techniques instead browser detection technique and browser specific codeRemove listeners which are not in use anymoreContinued..
  • 40. Loops are heavy, it can be optimized by using simple techniquesIn for loop, whenever reading length of array, store it in some variable instead of reading it again and again using array.lengthAvoid creating lot of HTML code with JavaScriptContinued..
  • 41. I will update these notes periodically with my experiments, stay tuned..Note