I’ve seen many people (including myself) trying out the power of jQuery for once and then getting stuck with it. Why not? It’s one of the coolest and smartest JavaScript library out there. However, I have broken out from the circle and found that Extjs is another great mentor in the field of JavaScript libraries. Especially, I think it’s UI components are unbeatable (Dojo can be a nearest candidate).
If you are habituated to think JavaScript coding in the syntax of jQuery, you can start working with ExtJS right now (with a few twist)! What you need is some little tuning in concept and syntax. Today I will be trying to explain how to do this in 6 important points :
- Document is ready – How to get the our document ready and where to start.
- Selecting elements – How to select elements in Ext.
- Dom scripting – Changing on and in the element.
- Ext events – Assigning and firing events.
- Ext Components – The powerful alternate of jQuery UI.
- Ajax – Making Ajax request in Ext.
Ok, let’s dive in to deep of each of these points.
Document is ready
First of all, you need to download, extract and set up the page for using Ext. Remember to download the API Documentation as well.
Now, here is how we setup jQuery and register a ready event for the document in jQuery:
<script type="text/javascript"> $(document).ready(function() { // do stuff when DOM is ready }); </script>
To do the same thing in Ext, you have to include default ext css, an adapter and the Ext itself. See the difference at the point of $(document).ready(). When the DOM is ready, Ext fires the Ext.onReady() event.
<script type="text/javascript"> Ext.onReady(function() { // do stuff when DOM is ready }); </script>
Selecting elements
To take any action, you have to select the element first. In jQuery, simply $(‘css-selector’) does everything. It works for a single element by ID, some elements by tag name/class or any complex selection with virtual selectors. But in Extjs, two different methods are used for selecting a single element by ID and other combined multiple element.
Selecting by id in Extjs is done by Ext.get() method. Here is an example of selecting an element and performing some action on it.
// Selecting by ID in jQuery var myDiv = $("#element-id"); // Selecting by ID in Extjs var myDiv = Ext.get('element-id'); // Perform some action on it // Add a class myDiv.addClass('my-class'); // Set the width 100 px, // true is for applying default animation on change myDiv.setWidth(100, true); // Retrive some information of the element // Get the elements box info as object {x, y, width, height} var box = myDiv.getBox();
See the Ext.Element class in API Doc to know what more actions you can perform on an element.
On other hand, Ext.select() method is used to select other CSS selection. Here is an example:
// Select elements with CSS Selector var imgs = Ext.select("#my-div div.member img"); // or select directly from an existing element var members = Ext.get('my-div'); var imgs = members.select('div.member img'); // Now, any Ext.Element actions can be performed on all the elements in this collection
Please note these points about selected Ext elements:
- Ext.get() returns Ext.Element object and Ext.select() returns Ext.CompositeElement object.
- All Ext.Element actions can be performed on Ext.CompositeElement object
- The actions performed on DOM nodes can be chained.
- Ext.select() uses the powerful DomQuery class for selecting. See this class for using virtual selectors and more.
Dom scripting
Like jQuery, ext has easy methods for perform insertion, deletion, moving, copying etc on selected element(s). Ext.Element class has functions for performing common tasks.
var el1 = Ext.get("my-1st-div"); var el2 = Ext.get("my-2nd-div"); // Appending elements el1.appendChild("<p>A new paragraph</p>").appendTo(el2) // Replcing, removing var el3 = Ext.get("my-3rd-div"); Ext.get("my-4th-div").replace(el3).insertAfter(el2); el2.remove()
See the Ext.Element class for more functions like these. To extending the power of DOM scripting, see the Ext.DomHelper class.
Ext events
First the easiest example. See how we do in jQuery and how to do in Ext.
// Binding an event in jQuery $(".btn").click(function() { // Do something on button click }); // Binding an event in Extjs Ext.select('.btn').on('click', function() { // Do something on button click });
So, instate of binding with functions with event name, we will bind with Element.on() function of Ext.Element class. The 1st parameter of Element.on() is the event name and the 2nd is a function name or an anonymous function.
See the Ext.EventManager and Ext.EventObject classes for complex event handling.
Ext Components
Ext has dozens of extensive UI Components. All they are extended from Ext.Component class. There are BoxComponent, Button, ColorPalette, DataView, DatePicker, Editor, ProgressBar, Slider, TabPanel, Tree, many kinds of Grids, Toolbars, Menus, Form components and much more. Each of this components needs separate tutorials to learn. So, I am not going to describe it in this little scope. See this page for component specific tutorials.
http://extjs.com/learn/Tutorials
Ajax
Ajax requests are handled in Ext.Ajax class. Sending basic Ajax request in Extjs is very similar to jQuery-
// Basic request in jQuery $.ajax({ type: "POST", url: "myurl.php", data: { foo: 'bar' }, success: function(msg){ alert( "Data Saved: " + msg ); } }); |
// Basic request in Ext Ext.Ajax.request({ url: 'myurl.php', params: { foo: 'bar' }, success: function(msg){ alert( "Data Saved: " + msg ); } }); |
Like the jQuery load function, here is also similar function exist in Ext.Element to insert Ajax response directly into DOM.
// Load Ajax response in directly in jQuery var msgBox = $('#message'); msgBox.load('myurl.php', {name : $('#name').val()} ); // Load Ajax response in directly in Ext var msgBox = Ext.get('message'); msgBox.load({ url: 'myurl.php', params: 'name=' + Ext.get('name').dom.value, });
See the Ext.Ajax class for more featured Ajax functions of Extjs.
Before ending, here is a surprise for you. Though you cannot leave jQuery for a moment, you are not going to miss the power of Ext. These tutorials describe how to use Ext with jQuery –
http://docs.jquery.com/Tutorials:Using_Ext_With_jQuery.
http://filchiprogrammer.wordpress.com/2007/12/27/combination-of-ext-and-jquery/
http://blog.jquery.com/2007/02/19/jquery-and-jack-slocums-ext/
See you soon.
nice tutorial..
it’s really helpful for jquery devs to start extjs.
enjoy!!
Hello Anis,
Thanks for this great tutorial about ExtJS. I wanted to let you know that we just released Ext Core, which is a powerful subset of ExtJS, for enhancing your new and existing webpages. Because of its small size (25kb) it is a perfect candidate to include on any page.
You can read more about it at http://extjs.com/blog/2009/04/04/ext-core-30-beta-released/
Kind Regards,
Tommy Maintz
Hi Tommy
It’s really cool!!
ExtJS is increasing it’s power day by day.
Thank you for your comment and information.
Thanks a lot.
Thanks anis for the great post. It will be helpful to get start with extJS for those who practice jquery.
Thanks Anis for putting such an easy to read article. I’ve been thinking a lot about Ext but was not sure how would the transformation work – but now I can guess it won’t be too hard 🙂
Cheers!
Really nice article.
Thanks a lot!
Just what the doctor ordered, thanks.
awesome post anis, very very informative. i was looking forward to such a comparative post cause i got an immense interest on Ext core. i was planning to start it for quite a long because of it’s awesome GUI components.
keep up the good work. very useful!
Is ExtJS free for using commercial purpose? Thanks for the grate article.
Thanks $@!ful.
Ext is available under Commercial and Open Source licenses.
See both of them here:
http://www.extjs.com/products/license.php
http://www.extjs.com/store/extjs/
Really very nice article.
Thanks for greate post. This post helped me so much 🙂
// Load Ajax response in directly in Ext
var msgBox = Ext.get(‘message’);
msg.load({
url: ‘myurl.php’,
params: ‘name=’ + Ext.get(‘name’).dom.value,
});
Here, msg.load should be msgBox.load 😉
However thanks for the post. I found it at the first position from:
http://www.google.com.bd/search?q=extjs+jquery
@saiful
Thanks for pointing out this mistake 😛
Updating right now.
Thanks for your nice post. Its really helpful for the jquery dev as you have discussed extjs comparing with jquery.
Anis bhai.
I am loving it. I am a newbie to learn ExtJS and this is a great article for us.
Very nice and useful tutorials to web designers,
Thanks for posting.
Anis bhai.
I am loving it. I am a newbie to learn ExtJS and this is a great article for us.
india like
December 16, 2009 at 1:53 pm
Very nice and useful tutorials to web designers,
Thanks for posting.
Hi,
it is a very nice tutorial but there is a huge difference between jQuery and ExtJS. Let me tell you a nice funny qoute about jQuery. jQuery is written for people that don’t know javascript by people who doesn’t know javascript. It is partially true cause jQuery is a strong tool if the javascript is not your first language and you want to add a little ajax functionality in your web page. But if you want to build the entire interface and functionality with javascript, i recommend ExtJS. A short comparison of jQuery and plus points of ExtJS; nice data binding and event features, crossbrowser and flawless ui design, strong and clear documentation.
min points of ExtJS: huge library, difficult ui customization, too many dom element creation
plus points of jQuery: strong selector, lightweight library, easy plugin development and of course huge selection of 3rd party plugins.
minus points of jQuery: you need to write too much CSS and HTML and depencies between the plugins. very poor documentation about the plugins.
I have been using Ext JS for last 18 months, take my words it is very hard to master Ext JS, because it is big and the documentation made by Ext JS developer is not that much helpful.
Thanks a lot! Very helpful for jqueriers 🙂
I can just say thank you for this wonderful post!
Good tutorial for starting up EXTJS.
Hi there,
I’m actually stunned that nobody spotted this:
el1.appendChild(“A new paragraph”).appendTo(el2)
should in fact read
el1.createChild(“A new paragraph”).appendTo(el2)
I have a question that I posted in Ext Js forum but has not gotten an answer. Link ( http://www.extjs.com/forum/showthread.php?97030-Add-tabpanel-using-a-button-in-a-different-panel ). Kindly look at it and see if you can post some clue.
Grabar datos de un grid en una bd
ha
como grababo una direcion de una carpeta y no graba nada
Good of you to introduce things.
Here’s a related detail.
ExtJS works with “Ext Core” – an Open Source, stand-alone JS framework. It also works with other popular JS frameworks (YUI, jQuery, Prototype, etc), using so-called adapters.
For all the “adapters” that work with ExtJS, Ext.Ajax.request should return a transactionId (an integer).
Currently, this does not work with the jQuery adapter.
So, it’s not possible to use the jQuery adapter and ExtJS and abort a long-running request, for instance.
(jQuery.ajax() does return an XHR object with which one could implement this kind of feature.)
You can track progress on this issue here:
http://www.extjs.com/forum/showthread.php?95408-OPEN-795-Ext.Ajax.request-Not-Returning-Transaction-Number&highlight=ajax+transactionId
Is it possible to use jQuery with ExtJS? I like jQuery in DOM manipulation, but ExtJS is much better than jQueryUI, I think.
Maybe there is a learning curve. But, the core library is as light as JQuery now, and the look and feel is so beautiful, and once you pass the initial curve, it is very fast development time. It has everything one possibly needs. It is so much worth learning it.
Really Nice ..
I m an ExtJs developer …
it seems jquery is somewhat more similar to Extjs
Thanks dude, Great post 🙂
Thanks, Saved lot of time 🙂
Very nicely written..I wish I could write as well as you!
One more fantastic post! I shared this one on Twitter – you should add a “like” button to your blogposts. 🙂
nice post, good, simple language …maybe extjs.com should hire you to re-do their awfully documented stuff !
how to extjs ; getElemnetById(‘mydiv’).innerHTML ?
In a single word, i can say that this is a great posting.
thanks for such type of good job…
Hi,
It is very good tutorial and easy to understand.
I have one question.
In my application we have 8 images in one component.
Now I want to get the image id which got selected by the client.
I don’t want to write code for each image using Ext.get(imgid).on(‘click’, function().
can you please give me the best solution using Extjs.
Really nice article, thanx for sharing. This is exaclty what I’m looking for before start using jQuery after ExtJS.
and so… thank you
Very nice article. A quick question. What is itemId in Ext JS for, and how can we search an element by the itemId using Ext.get methods