Upload
julie-iskander
View
954
Download
0
Tags:
Embed Size (px)
Citation preview
Julie Iskander, Lecturer at ITIMSc. Communication and Electronics
Lectu
re O
utlin
es
Object Oriented JavaScript Revision
Prototype js
Extending the DOM
Elements dimensions
Event Model
Classes and inheritance
JSON
Ajax
OO JavaScript
Remember
Everything is an Object
Every Object can have instance methods
All objects have prototype
Functions are first-class Objects
JavaScript is multi-paradigm language Imperative style of C Object oriented style of Java Functional style of Lisp
First T
heory, then Practice.
Prototype
then
Script.a
culo.us
Prototype JS
Prototype
Prototype
It is about the abstract not the concrete
Many toolkits is built over it like script.aculo.us
$ Function
$() document.getElementById() $(‘menu’) returns element with id=menu $(element) if element is a node, it is returned
back $(‘menu’,’menuitem1’,’menuitem2’) return an
array of 3 nodes id=menu and menuitem1 and menuitem2
$ extends node returned with useful prototype node methods
$$ Function
$$(), selects node using CSS selectors, support CSS3 selectors $$(‘li’) select all li elements $$(‘li.current’) select all li elements of
class=current $$(‘#menu a’) select element all a elements inside
of element with id=menu
$$ extends nodes returned with useful prototype node methods
Enumerable Object
A mixin that provides methods useful for collections
Use in the following classes Array Hash DOM- related objects
Instance Methods: all; any; collect; detect; each; eachSlice; entries;
every; filter; find; find; All; grep; include; inGroupsOf; inject; inspect; invoke; map; max; member; min; partition; pluck; reject; select; size; some; sortBy; toArray; zip
each
elem.each(Visitor object) Implements visitor on each element Example:
[1,3,4,7,89,6,3,4,5].each(function(elem)
{
alert(elem);
});
each
Implement continue using return Example:
[1,3,4,7,89,6,3,4,5].each(function(elem)
{
if(elem>10)
return;
alert(elem);
});
each
Implement break by throw $break Example:
[1,3,4,7,89,6,3,4,5].each(function(elem)
{
if(elem>10)
return;
if(elem==4)
throw $break;
alert(elem);
});
detect
Takes function that returns true/false
Returns first element that returns true
If no match returns undefined
Examples:[1,3,4,6,8,0,9].detect(function(elem) { return elem==0 }));
See also select, reject, partition
map
Applies function on each element, pushes the return into an array that is eventually returned
Example:[2, 5, 7, 9,50].map(function(item) { return item*item; });
Extending DOM
Prototype’s DOM extension
Modifying properties of elementsVisibility
.hide() .show() .visible() returns true/false .toggle()
Prototype’s DOM extension
Modifying properties of elementsStyle and classes
.addClassName(‘class name’) .removeClassName(‘class name’) .hasClassName(‘class name’) returns
true/false .toggleClassName(‘class name’) .setStyle({ prop:val,prop:val,……… }) .getStyle(‘css property’)
Prototype’s DOM extension
Modifying DOM.update(‘ ’)
Change content of element.replace(‘ ’)
Remove element and add a new one in its place
.insert(‘ ’), insert({top:’ ’,bottom:’ ‘, after:’ ‘, before : ‘ ’ })
.remove()
Templates
Templates
The Template class uses a basic formatting syntax, similar to Ruby.
The templates are created from strings that use symbols in the form (e.g., #{fieldName})
The symbols are replaced by actual values when the template is applied (evaluated) to an object.
Example
var myTemplate = new Template('<p>The TV show #{title} was
directed by \ #{author}.</p>');
// Create hashes with the required values for placeholders var record1 = {title: 'Metrix', author:'Arun Pandey'}; var record2 = {title: 'Junoon', author:'Manusha'}; var record3 = {title: 'Red Moon', author:'Paul, John'}; var record4 = {title: 'Henai', author:'Robert'};
Example
var records = [record1, record2, record3, record4 ]; // Now apply template to produce desired formatted output records.each( function(conv) { $$('p')[0].insert( {bottom: "<div>Formatted Output : " + myTemplate.evaluate(conv)+"</div>" }); });}
Form Management
Prototype Form Methods
disable() Disables the form as whole. Form controls will be visible but uneditable.
enable() Enables a fully or partially disabled form.
Prototype Form Methods
findFirstElement() Finds first non-hidden, non-disabled form control.
focusFirstElement()Gives keyboard focus to the first element of the form.
getElements() Returns a collection of all form controls within a form.
Prototype Form Methods
getInputs() Returns a collection of all INPUT elements in a form. Use optional type and name arguments to restrict the search on these attributes.
request() A convenience method for serializing and submitting the form via an Ajax.Request to the URL of the form's action attribute. The options parameter is passed to the Ajax.Request instance, allowing to override the HTTP method and to specify additional parameters.
reset() Resets a form to its default values.
Element Dimensions
Element Dimension
Solve problem of inconsistent browser measurements
.measure(‘ property‘ )$(‘mydiv’).measure(‘width’) pixel values
For better performance, when measuring more than one dimension .getLayout() Layout object
$(‘mydiv’).getLayout().get(‘width’);
http://prototypejs.org/learn/element-layout
Event Model
Events
A single model for all browsers
Event.observe(element,’event’,function{}())Event.observe(window,’load’,function
(){})
Element.observe$(‘ ’).observe(‘event’,function(){})
Events
Can register events on elements or children of an element.
The selection of children is done using CSS-selectors
Element.on $(‘ ’).on(‘event’,function(){}) $(‘ ’).on(‘event’,’css selector for child’,function()
{})\ $(‘item’).on(‘click’,’li’, function(){
………………
});
Event Object
All event handlers are receive an event object function submitFun(evnt)
{
evnt.element() //returns element object that triggered event
evnt.preventDefault() //stop default behaviour
evnt.isLeftClick() or isRightClick() or isMiddleClick()
evnt.pointerX() or pointerY()
evnt.pointer() object{x: , y: }
}
Classes and Inheritance
Class
Manages Prototype’s class-based OOP system
Class methods: create()
Instance Methods: addMethods()
Class.create([superclass][, methods...])
superclass (class): superclass to inherit from.
method (object): an object (mix-in) that will be mixed-in to my new class. Multiple mixins can be used, later mixins take precedence.
returns a constructor function that can be called using new operator. It will invoke the initialize method.
The object mixin must contain ‘initialize’ method to be called when new is called.
Class.create()
var Person = Class.create({
initialize: function(name) { this.name = name; },
say: function(message) { return this.name + ': ' + message;
}
});
Example
Create your own class that’s mixed with Enumerable
Var MyClass=Class.Create(Enumerable, {
initialize:function(){………….},
_each: function(iterator){for(var i=0;i<……){
iterator(….);}
}});
JSON
Encoding
Number#toJSON, String#toJSON, Array#toJSON, Hash#toJSON, Date#toJSON, and Object.toJSON. var data = {name: 'Violet', occupation: 'character', age: 25 }; Object.toJSON(data); //-> '{"name": "Violet", "occupation": "character", "age": 25}’
For custom objects, Set toJSON method which will be used by Object.toJSON. var Person = Class.create({ initialize: function(name) { this.name = name; }, toJSON: function() { return ('My name is ' + this.name + ' and I am ' + this.age + ' years old.').toJSON(); } }); var john = new Person('John', 49); Object.toJSON(john); //-> '"My name is John and I am 49 years old.”’
Parsing
String#evalJSON var data = '{ "name": "Violet", "occupation":
"character" }'.evalJSON(); data.name; //-> "Violet”
Ajax
Ajax
A wrapper class around the XMLHttpRequest
Uses callbacks to handle different phases of the asynchronous request.
If requested page is a JavaScript code then it is automatically evaluated and executed.
Ajax.Request
new Ajax.Request(URL, Option) URL : string representing the url to request Options hash
method parameters contentType onSuccess onFailure
For complete details: http://api.prototypejs.org/ajax/
Ajax.Updater
Updates a portion of the DOM with external source
new Ajax.Updater(ID , URL , Options) ID: the id of the element to be updated URL: url to fetch Options: hash same as previous
insertion: Insertion.Top Insertion.Bottom
Insertion.After Insertion.Before
Ajax.PeriodicalUpdater
Runs Updater in periodical Intervals to repeatedly fetch content from the server.
new Ajax.PeriodicalUpdater(ID, URL, Options) Same except Options
frequency : interval in seconds decay : factor to multiply frequency by everytime the
fetched response is the same as the previously fetched.
stop()
start()
References
http://prototypejs.org/
Practical Prototype and script.aculo.us, Andrew Dupont , 2008