Archive for the ‘News’ Category

Building a Rating Widget with Ext Core 3.0 Final and Google CDN

Wednesday, June 10th, 2009

We are very proud to announce the final release of Ext Core under the MIT license. Your feedback was invaluable. Thank you for all the bugs reported and test cases created. For those of you who are new to Ext Core, we suggest you read the previous blog post about the all the features and examples that we released as part of the beta. You can find a list of changes and fixes we made for the final here.

For this post we will leverage the power of Ext by creating and dissecting a useful star rating example. We hope to share some of the general best practices behind creating unobtrusive, reusable code with Ext Core to liven up your pages.

Making a Splash

Including Ext Core on your site is easier than ever. We are honored to share with the community that Ext Core is now available via the Google AJAX Library API. Many thanks to Ben Lisbakken at Google for working with us to make this a reality.
//any of these will work ;)  <script type="text/javascript" src="....
http://ajax.googleapis.com/ajax/libs/ext-core/3.0/ext-core.js
http://ajax.googleapis.com/ajax/libs/ext-core/3/ext-core.js
http://ajax.googleapis.com/ajax/libs/ext-core/3.0/ext-core-debug.js
http://ajax.googleapis.com/ajax/libs/ext-core/3/ext-core-debug.js
Alternatively, you can use Google AJAX API Loader's google.load() method:
google.load('ext-core', '3');
google.load('ext-core', '3', {uncompressed : true});

Getting Started

Ext Core is a perfect fit for adding behavior to existing HTML. When designing a widget, having a markup structure that provides graceful degradation is an added plus. For this example, we will be using radio buttons. We can "group" the elements to specify which radio buttons are part of the control. It could look something like the following:
<div id="rating1">
    <input type="radio" name="rating1" value="1" title="Very poor">
    <input type="radio" name="rating1" value="2" title="Not that bad">
    <input type="radio" name="rating1" value="3" title="Average">
    <input type="radio" name="rating1" value="4" title="Good">
    <input type="radio" name="rating1" value="5" title="Perfect">
</div>
This markup allows user to have the ability to rate an item even without the fancy stars and additional functionality that we have in mind. Take notice that this simple markup contains powerful information like the name, value and title for each item which we can reuse with our rating widget.

The API

One of the most important aspects of building reusable code is providing your developers a powerful API. Our aim here is to allow developers to progressively enhance and convert the markup into a star rating with a simple API. In this case we will need the element that wraps around the radio controls, and some optional configuration to customize the behavior of the widget. Following the Ext tradition we will provide these configuration options in the form of an object literal. A possible API for our widget could look like this:
//Keep it simple
new Ext.ux.Rating('rating1', {
    showTitles: true
});

Ext.util.Observable

So now that we know how we want to use our component, lets go ahead and actually look at some details on how to write it! In our previous post we mentioned that Ext Core allows you to write neatly structured object-oriented code. Whenever you want to create a piece of functionality, you should try to bundle it into a separate class. In most cases you will need to be able to listen for events on instances of your class. Ext provides a power class, the Ext.util.Observable class, to springboard your development. This is the same class that almost all classes in Ext JS extend from! Our basic shell for our rating plugin could look something like this:
Ext.ns('Ext.ux');
Ext.ux.Rating = Ext.extend(Ext.util.Observable, {
    // Configuration default options
    showTitles: true,
 
    // Our class constructor
    constructor : function(element, config) {
        Ext.apply(this, config);      
        Ext.ux.Rating.superclass.constructor.call(this);     
 
        this.addEvents( 'change');  
 
        this.el = Ext.get(element);
        this.init()
    }
});
For those of you familiar with Ext JS will recognize this pattern. In this piece of code we have created a namespace to put our class into using the Ext.ns() function. Then we create our class using the Ext.extend method with Ext.util.Observable as the base class. We define some configuration options with default values and then set up our constructor method which will be called when we create a new instance of our class. We also define some custom events and wrap the element passed to the constructor with an Ext.Element instance. We use the Ext.get() flexible nature to have support of passing an id string, DOM Element or Ext.Element to our constructor.

Reaching the stars

It is time to think about the things we need to get our widget working. First we want to replace the radio buttons with our stars, we will need to store the values and titles for each star, we want to create a hidden input to put the current value in and finally we need to set up event listeners to listen for mouse hovers and clicks.
init : function() {
    var me = this; 
 
    // Some arrays we are going to store data in
    this.values = [];
    this.titles = [];
    this.stars = [];
 
    // We create a container to put all our stars into
    this.container = this.el.createChild({
        cls: 'ux-rating-container ux-rating-clearfix'
    });
 
    // We use DomQuery to select the radio buttons
    // Then we can loop over the CompositeElement using each
    this.radioBoxes = this.el.select('input[type=radio]');
    this.radioBoxes.each(this.initStar, this);
 
    // We use DomHelper to create our hidden input
    this.input = this.el.createChild({
        tag: 'input',
        type: 'hidden',
        name: this.name,
        value: this.values[this.defaultSelected]
    });
 
    // Lets remove all the radio buttons from the DOM
    this.radioBoxes.remove();
 
    if(this.disabled) {
        this.disable();
    } else {
        // Enable will set up our event listeners
        this.enable();
    }
}

Creating Stars - using DomHelper and accessing the DOM from Ext Element

 
initStar : function(item, all, i) {
    // We use the name and disabled attributes of the first radio button 
    if(i == 0) {
        this.name = item.dom.name;
        this.disabled = item.dom.disabled;		
    }
 
    // Saving the value and title for this star     
    this.values[i] = item.dom.value;
    this.titles[i] = item.dom.title;
 
    // Now actually create the star!
    var star = this.container.createChild({
        cls: 'ux-rating-star'
    });
 
    // Save the reference to this star so we can easily access it later
    this.stars.push(star.dom);
},

Enable and Select Stars - listening for events, using the target of an event and firing custom events

 
enable : function() {
    // ... some code missing here ...
 
    // We will be using the technique of event delegation by listening
    // for bubbled up events on the container       
    this.container.on({
        click: this.onStarClick, 
        mouseover: this.onStarOver,
        mouseout: this.onStarOut,
        scope: this,
        delegate: 'div.ux-rating-star'
    });        
},
 
onStarClick : function(ev, t) {
    if(!this.disabled) {
        this.select(this.stars.indexOf(t));
    }
},
 
select : function(index) {
    // ... some code missing here ...
    else if(index !== this.selected) {
        // Update some properties           
        this.selected = index;
        this.value = this.values[index];
        this.title = this.titles[index];
 
        // Set the value of our hidden input so the rating can be submitted			
        this.input.dom.value = this.value;
 
        // the fillTo() method will fill the stars up until the selected one
        this.fillTo(index, false);
 
        // Lets also not forget to fire our custom event!         
        this.fireEvent('change', this, this.values[index], this.stars[index]);  
}

Filler Up - dom manipulation (adding classes)

 
fillTo : function(index) {
    var cls = 'ux-rating-star-on';
 
    // We add a css class to each star up until the selected one   
    Ext.each(this.stars.slice(0, index+1), function() {
        Ext.fly(this).addClass(cls);
    });
 
    // And then remove the same class from all the stars after this one
    Ext.each(this.stars.slice(index), function() {
        Ext.fly(this).removeClass(cls);
    });      
}

We won't discuss all the details since most of it is pretty straightforward, but the final product should give you a general idea of how to use the basic functionality available in Ext Core to tie together all the missing pieces.

Wrapping it up

In this example we used the following cross-browser compatible functionality available in Ext core:
  • Classical Inheritance Class System
  • Observable Class
  • DomQuery
  • DOM manipulation and traversal
  • Event handling
  • Markup generation

Ext Core makes it fun to write code, and helps you create clean, well-structured classes using a set of cross-browser abstractions on the existing browser API's. For those of you who want to use it or are just interested in seeing the completed work, we have included a version of the widget in the Ext Core Final build. You can see the working widget embedded in the post below:

The example page illustrating this widget can be found here.

Final words

We hope that this library will find its way into many of your dynamic web pages and make your lives as web developers easier and more enjoyable. We are looking forward to seeing the great things you will create using it. We are always looking for ways to make this library better and we think the best way to do that is by listening to your suggestions. So, don't be shy and tell us what you think.

Ext JS 3.0 RC2 Release – Stable, Robust, and Enhanced

Wednesday, June 3rd, 2009

We are pleased to announce that the latest release candidate of Ext 3.0 is now publicly available. We are very proud of the stability of this release. We’d like to thank our support team and elite community members who have tested the release candidates. You have assisted in squashing a number of bugs affecting both Ext Core and Ext JS. The time taken to report issues and create test cases is much appreciated.  The list of issues resolved for this deployment can be found for Ext Core and Ext JS separately. Some of the major fixes include:

  • Items are now automatically laid out when they are first shown – rather than trying to calculate dimensions when they are hidden. This will solve a number of layout issues that occur across all components.
  • The toolbar overflow has been improved to support all toolbar items, including CycleButtons and Buttons with toggle enabled (both grouping and otherwise).
  • Issues with some animations in the Fx library have been corrected.

New Examples

Several new examples have been added in this version to help you get up and running with Ext 3.0 quickly.

  • A new example detailing the new REST support for stores has been included, which supports full CRUD operations.
  • // A single store using the Proxy, Reader and Writer together
    // through a RESTful interface
    var store = new Ext.data.Store({
           id: 'user',
           restful: true, // <-- This Store is RESTful
           proxy: proxy,
           reader: reader,
           writer: writer // <-- plug a DataWriter into the store just as you would a Reader
    });
  • An excellent demo illustrating the use of multiple providers together is now available. Here we use the Ext.direct polling to make regular requests to get the server’s time. These requests can be interspersed with those of a remoting provider, which allows both an echo and a multiplication to take place.
  • <script type="text/javascript" src="php/api.php"></script> //Ext.app.REMOTING_API
     
    <script type="text/javascript">
    Ext.onReady(function(){
        Ext.Direct.addProvider(
                Ext.app.REMOTING_API,
               {
                   type:'polling',
                   url: 'php/poll.php'     //additional Provider
               }
         );
    });
    </script>
  • An additional example demonstrates the new writer capabilities of Ext. It provides full CRUD support using a grid, without any use of Ext direct. It shows how the writer can be used with legacy style server interaction.

Writer Sample
Writer Sample

New Features

It wouldn’t be a cool release if we didn’t add some goodies. The documentation has been significantly improved, with a number of classes getting extra information or examples added to their reference page. Peruse the new and updated documentation to find some hidden gems.

REST support

Many web frameworks today are implementing REST services to simplify the CRUD process. With Ext’s new data package enhancements, designing a RESTful Store is a snap. Simply plug a suitable DataWriter extension, like JsonWriter, into any Store along with a standard HttpProxy and set the new Store configuration-property restful: true. Your Store will now automatically generate GET, POST, PUT and DELETE requests to your server.

DataWriter

The Ext JS 3.0 data package introduces compelling enhancements with a new component called DataWriter (along with descendant JsonWriter). These collection of enhancements will simplify your interaction with Ext.data.Store by automatically generating CRUD requests to your server-side framework. Once you plug a suitable DataWriter extension, like JsonWriter, into your Store you’ll never have to manually compose Ajax CRUD requests to your server again — it’s all automated now and highly configurable.

//define and we'll handle the rest
var proxy = new Ext.data.HttpProxy({
    api: {
        read    : 'app.php/users/read',
        create  : 'app.php/users/create',
        update  : 'app.php/users/update',
        destroy : 'app.php/users/destroy'
    }
});

Ext.Error

A base error class has been added, with the intention of extending this to provide more robust error handling throughout the framework in the debug build. As part of this, we will be looking at introducing extra code into the debug build to check for common errors and problems. The developer will be alerted to the issue allowing them to quickly find the point of failure and rectify the problem. These extra checks will be automatically removed in the production build so that performance is not negatively impacted. Stay tuned for more details.

As an example, here are some errors used in data namespace to make it easier for new and seasoned developers:

"DataProxy attempted to execute an API-action but found an undefined url / function.  
Please review your Proxy url/api-configuration."

"Could not locate your "root" property in your server response.  
Please review your JsonReader config to ensure the config-property "root" matches the property 
your server-response.  See the JsonReader docs for additional assistance."

We look forward to community input on where we should add additional checks based on your experiences.

Ext.direct interoperation with Ext.Component subclasses

The main feature that has been added in this release candidate is extra interoperability between Ext.direct and other Ext.Component classes. Both the Ext.tree.TreePanel and Ext.form.FormPanel can now load their data via Ext.direct.

Loading a tree using Ext Direct

In this case our server side method takes a single parameter (the id of the node) and returns an array of JSON nodes. An example of this can be found here.

API Definition:

Ext.app.REMOTING_API = {
    "url": "php/router.php",
    "type": "remoting",
    "actions": {
        "TestAction": [{
            "name": "getTree",
            "len": 1
        }]
    }
};

Sample code

Ext.onReady(function(){
    Ext.Direct.addProvider(Ext.app.REMOTING_API); //setup provider
 
    var tree = new Ext.tree.TreePanel({
        width: 400,
        height: 400,
        autoScroll: true,
        renderTo: document.body,
        root: {
            id: 'root',
            text: 'Root'
        },
        loader: new Ext.tree.TreeLoader({
            directFn: TestAction.getTree //specify directFn on tree
        }),
        fbar: [{
            text: 'Reload root',
            handler: function(){
                tree.getRootNode().reload();
            }
        }]
    });
});

Forms and Ext Direct

By popular demand, we’ve added Ext.direct for loading and submitting data via forms.

var form = new Ext.form.FormPanel({
               api: {
                      load: App.ss.ClientForm.load,   
                      submit: App.ss.ClientForm.submit
                      },
                paramOrder: ['uid'],
                defaultType: 'textfield',
                items: [/* Ext.form.Fields go here */]
});

We encourage you to download and use the latest release candidate. We hope you enjoy using Ext JS 3.0 – we had a blast creating it.

Lastly, following a tradition started with Ext 1.0, we are offering a pre-release sale with hefty discounts to upgrade your 2.x license. If you’ve thought about purchasing an Ext License, for a limited time, you can purchase online for less than an Ext 2.x License. There’s no better time to support the Ext team. Enjoy.

Ext Core 3.0 Beta Released

Saturday, April 4th, 2009

As we approach the three year anniversary of the initial release of Ext, the Ext Team is proud to announce the immediate availability of Ext Core 3.0 beta for download. Ext Core provides a cross-browser consistent API for performing the most common tasks in JavaScript development for web pages. Ext Core is released under a permissive MIT license - there is no cost to use Ext Core - it's free for everyone.

Drawing upon our experience creating rich user interfaces, we isolated the most powerful features used to enhance new or existing web pages. Ext Core is a subset of the upcoming Ext JS 3.0 release optimized for speed & file size. Developers familiar with Ext JS can leverage their existing skillset to provide an enhanced user experience to their web pages.

Ext Core Overview

Ext Core distinguishes itself from other JavaScript libraries with a well defined object-oriented structure, which enables you to write clean and reusable code. Ext Core provides cross-browser abstractions for:

  • DOM manipulation and traversal
  • CSS management
  • Event handling
  • Dimensions and Sizing
  • AJAX and JSON Support
  • Animations

In addition to providing cross-browser abstractions for the DOM, Ext Core also includes some of the most used and popular utilities from Ext JS.

  • Classical Inheritance Class System
  • Observable Class
  • Markup generation and Templating
  • Timed code execution
  • URL encoding and decoding

Library Size

Ext Core is perfect for inclusion in a dynamic web page or even a small application. We have gone through the source with a round of refactoring aiming to get the best possible compression. Considering all of the included features, Ext Core has a small footprint. It has a compressed footprint of 25K minified and gzipped.

Ext Core Manual

Another aspect of Ext Core that sets itself apart from other libraries is the Ext Core Manual. Written by the authors of Ext Core, and reviewed by the community Ext-perts, the Ext Core Manual provides beginners and experienced developers an in-depth view of how to use every aspect in Ext Core. No method or class has gone uncovered. This mini-book (75 pages printed) is meant to amplify the existing API documentation. We encourage everyone, including Ext JS users, to read the manual to sharpen their understanding of Javascript and Ext.

Examples using Ext Core

To illustrate the capabilities of Ext Core, our team built a few of the most commonly used extensions on the web. They also serve as a great reference for creating your own extensions. Given the small footprint of Ext Core, we were able to embed the Example Explorer into this blog post. These examples are freely available to be used on your web pages today.

DomQuery and CompositeElementLite

DomQuery provides high performance selector-based element retrieval. It supports most of the CSS3 selectors specification, along with a few custom selectors and basic XPath. A common use case when working with the DOM is manipulating a collection of elements. Using an instance of CompositeElementLite, Ext Core allows you to interact with a collection the same way you would with a single element. Here is an example of adding a class to a collection of elements.

// selects a collection of elements and adds the class 'myCls' to each one.				
Ext.select('div:has(> span.someClass)').addClass('myCls');

Event handling made easy

Ext Core's event handling abstraction gives you cross-browser normalized event handling and support for custom events. On top of that, it provides configuration options for delaying, buffering, delegating, and targeting events. In the example below, we update an element to indicate a click event occurred.

Ext.fly('elId').on('click', function(e, t){
    // e is normalized cross browser event object
    // t is the target element
 
    // Update contents of the element with id "log" to notify the user of the event firing
    Ext.fly('log').update('You clicked on the element with id: ' + t.id);    
});

Ajax Requests

Ext Core has a clean cross-browser abstraction for making XMLHttpRequests. It gives you an intuitive API to retrieve and send data to the server without requiring the page to refresh. Take a look at a basic Ajax request using Ext Core :

Ext.Ajax.request({
    url: 'serverSide.php',
    success : function(r){
        // using the built-in Ext JSON support
        var data = Ext.decode(r.responseText);
 
        // data is now a regular Javascript object
        console.log(data.items[0].title);
    }
});

If all you need to do though is update the contents of an element you can use the shorthand version:

Ext.fly('elId').load({
    url: 'serverSide.php'
});

Some final words

With 70,000+ registered members on the Community Forums and a company dedicated to making Ext "a foundation you can build on", we hope that this core library will find its way into many of your dynamic web pages and make your lives as web developers easier and more enjoyable. We had a lot of fun putting Ext Core and the examples together, and we are looking forward to seeing the great things you will create using it.

Ext 2.2 Released

Monday, August 4th, 2008

We are pleased to announce the release of Ext 2.2, a fully backwards-compatible maintenance release of Ext. This is a recommended upgrade for all Ext 2.x users as it not only adds many new components and examples, but also provides a host of important bug fixes and performance improvements.

New Features

While many minor release versions are simply boring bug fix releases, we have also decided to pack a bunch of brand new components and extensions into 2.2 for your enjoyment. Let’s start off with the fun stuff!

CheckboxGroup / RadioGroup

CheckboxGroup and RadioGroup
Technically, while the individual Checkbox and Radio controls are not new, they may as well be, considering the overhaul they have had in this release. Gone are the ugly standard browser input controls, now replaced by attractive, visually-consistent Ext-ified versions (a long-overdue improvement).

In addition to that, we’ve added group controls for both that support complex layouts with just a config option or two. This was inspired, in part, by the RadioGroup user extension created by community member vtswingkid. Previously in order to accomplish similar grouping layouts for checkbox/radio controls you would have had to create a container with a ColumnLayout and manually place your controls across multiple column configs. Now you can do something as simple as…

	... },{
	    xtype: 'checkboxgroup',
	    fieldLabel: 'Multi-Column (horizontal)',
	    columns: 3,
	    items: [
	        {boxLabel: 'Item 1', name: 'cb-horiz-1'},
	        {boxLabel: 'Item 2', name: 'cb-horiz-2', checked: true},
	        {boxLabel: 'Item 3', name: 'cb-horiz-3'},
	        {boxLabel: 'Item 4', name: 'cb-horiz-4'},
	        {boxLabel: 'Item 5', name: 'cb-horiz-5'}
	    ]
	},{ ...

Check out the live example.

History

History
Another component that has been missing in Ext is a browser history utility to enable history stack navigation within your single-page Ext application. The new Ext.History singleton makes it extremely easy to do exactly that, and it uses an event-based API to notify you when the browser history has changed. Check out the live example.

MultiSelect / ItemSelector

MultiSelect
These two components were contributed to Ext by community member TJ Stuart (thanks TJ). The MultiSelect is a traditional list control that allows for selecting multiple list items, and the ItemSelector combines two MultiSelects into a more sophisticated control that includes drag-and-drop list selection and bulk selection and deselection among other features. Check out the live example.

For the time being these controls are still implemented as user extensions, and the MultiSelect will likely be migrated to become a core component in a future release. They should not yet be considered to be API-stable controls, but should still be quite useful if you need the functionality.

FileUploadField

FileUploadField
This is an official extension provided as a sample for implementing a useful form component. Not everyone needs a form upload component, but if you do, you can’t live without it. This control is fully styled and has an API consistent with other Ext form controls. It also supports both Text+Button (read-only text) and Button-only modes, and can participate fully in form layouts. Check out the live example.

XmlTreeLoader

XmlTreeLoader
This official extension provides a great demonstration of extending an existing Ext component to provide functionality that you need in your own application. Again, loading an XML document into a tree is not needed by everyone, but if you do need something similar, this should be a great demo. Check out the live example.

GMapPanel

GMapPanel
This extension was originally written up as a demo for one of our previous blog posts. However, it proved to be such a hit with the community that we transformed it into an official extension. This is another useful example of extending a standard Ext component, in this case to interface with an external API. Check out the live example.

Other Notable Changes

“But wait, isn’t this a maintenance relase?”

It sure is, and there have been countless fixes and improvements in the framework since 2.1. Here are some of the most important highlights from what’s changed.

Full Firefox 3 Support

History
Firefox 3 is a fantastic upgrade from version 2 (especially on Mac — I’m looking at you, scrollbars!). Ext performance out of the box on Firefox 3 is far better than it was before. However, the negative is that the new version also introduced a handful of bugs that have been addressed in this Ext release. Most notably:

  • Grid columns were visually misaligned
  • Ext.onReady stopped working reliably (our desktop demo stopped initializing correctly)
  • The DatePicker width ran off the screen, making the control unusable
  • The TabPanel contextmenu event stopped firing, killing the TabCloseMenu extension
  • Window dragging stopped working correctly
  • Various minor visual inconsistencies

If any of these issues sounds familiar, then Ext 2.2 is for you!

Advanced Drag and Drop Examples

Drag and Drop
There are 3 new advanced drag-and-drop examples available in the Ext distribution, authored by community members Animal and JGarcia (thanks guys). These examples demonstrate:

  • How to implement the Ext.DragZone/DropZone classes in the context of a business-style application (live demo)
  • Dragging and dropping records from one grid to another (live demo)
  • Dragging records from a grid and dropping them onto a form to populate the form’s fields (live demo)

Performance Improvements, Bug Fixes and Other Goodies

  • New properties for differentiating Firefox version (Ext.isGecko2 and Ext.isGecko3)
  • New support for deferred row rendering in the grid (the default), boosting render performance significantly
  • Refactor of EventManager to improve how event handlers are managed, which should help alleviate IE DOM leaks
  • Fixed the “small PNG’s can cause performance issues in IE7″ problem
  • More than 100 additional fixes and improvements

Consult the 2.2 release notes to get a complete listing of all changes.

We are very happy with this release and hope that it will provide a lot of value to our community. And for all of you version 1.x users, we have not forgotten about you either. We plan to push out Ext 1.2 within the next few days to address many of the same bugs mentioned above, including Firefox 3 issues, so keep an eye out for that.

Download Ext 2.2

Ext GWT v1.0 Released

Monday, July 7th, 2008

The Ext team is proud to announce that the official release of Ext GWT v1.0 is available for download. This is the first release of Ext GWT which is the culmination of many weeks of development from the Ext development team as well as our community of testers and supporters.

New users should take a look at the new screencasts which demonstrate how to setup your develop environment and create your first Ext GWT application.

GWT 1.5

Ext GWT 1.0 is compiled and tested with GWT 1.5 RC1.

Ext GWT is a 100% native GWT application written in Java. Ext GWT does not wrap any 3rd party JavaScript and does not use any external JavaScript files. Ext GWT fully leverages the GWT API including the widget lifecylce, events, listeners, messaging, and RPC.

Performance

Performance was a high priority item for the Ext GWT 1.0 release. Many changes were made since the first beta releases. Initial rendering times are quicker and the new layout code reacts quicker to window resizing. Improvements can easily be seen in the Explorer demo.

Demo Applications

Ext GWT 1.0 includes two demo applications that serve as a great resource for using the library. The complete source code for the Explorer and Mail demo are included in the release.

Mail Demo

Advanced Form Layouts

With Ext GWT 1.0, advanced form layouts are supported, allowing developers to easily create multi-column forms and to also embed child containers such as TabPanel. These layouts are supported by both AnchorLayout, and the new ColumnLayout.

ColumnForm

Improved Data Loading, Store, Binder, and Field API

A number of enhancements and updates were applied to the data related classes. More information on data loading can be found in the Help Center.

New API

Documentation

A new Help Center is now available and will serve as the repository for Ext GWT documentation. Ext GWT 1.0 adds a significant amount of new documentation including a new Eclipse Help Plugin. We’ve added a number of new articles and tutorials to complement the 1.0 release, including:

  • Project Setup Guide
  • Building from SVN Guide
  • Component Reference
  • Data Loading Reference
  • LayoutContainer Reference
  • Model Mapping With Dozer
  • Remote TreeTable Tutorial

In addition, a new Eclipse Help Plugin is available. All the above listed content can be integrated into the Eclipse Help Info Center. The plugin is available via the new Update Site.

Help Center

The Ext GWT API is now available with integrated UML diagrams. These diagrams make it easy to visualize the package structure and details of all Ext GWT classes. The diagrams are available in the Help Center under Reference.

UML

Download

To download Ext GWT 1.0 or view the full release notes (API changes documented), please visit the Ext GWT download page. To find out more about Ext GWT and view the latest 1.0 samples, please visit the Ext GWT overview. To see 1.0 in action, take a look at the Explorer Demo or the Mail Demo.

Ext JS 2.1 and Ext GWT 1.0 released, preview of Ext JS 3.0

Monday, April 21st, 2008

Ext JS is pleased to announce the latest release of the Ext JS toolkit and the introduction of a new product, Ext GWT 1.0 (beta 1). The Ext JS version has been updated to 2.1 and includes new components, performance improvements, bug fixes and documentation enhancements. Ext GWT 1.0, is a Java library for building rich internet applications with the Google Web Toolkit (GWT).


Ext JS 2.1

Performance Improvements
Portions of Ext JS have been refactored to optimize performance including core functionality which will benefit the entire library. Many people will see significant performance gains when upgrading to 2.1 from 2.0.2. The typical Ext JS application will use much less memory, and many applications will see a memory usage improvement of over 300%! 2.1 is fully backwards compatible.

Slider
The slider component supports vertical and horizontal orientation, incremental snapping, tooltips, custom styling and a lot more. Check out the new slider example page.
Slider

StatusBar
The StatusBar can be rendered into any panel or window, providing a standard area for status text and icons indicating what’s happening in your application. The StatusBar supports automatic “busy” notification for indicating in-process activity, and can also be easily extended and customized as in the screenshot below. It also supports all standard Toolbar items. Try out the interactive example yourself (there’s also a great new example of customizing the StatusBar via a form validation plugin).
StatusBar

First-Class REST Support
Developers using a RESTful architecture will be excited to know that Ext JS now has full support for all HTTP verbs (no longer just POST and GET). We’ve also added support for passing in additional header information to ease integration with server-side platforms.

Examples and More Examples
We have added a much improved example explorer for Ext JS, in addition to a brand new one for Ext GWT, along with the site re-design. You can find several new Ext JS examples indicated by the red “New!” text appearing by the description. There are several notable new examples that you may have missed:

Grid Filtering
Grid Filtering: Filter your grid using specifically-typed filter controls that plug directly into the grid header. Special thanks goes to community member ambience for contributing his user extension so that it could be distributed directly with Ext JS.

Layout Browser

Layout Browser: Includes examples for each standard Ext layout, several custom layouts and combination examples.

Custom Drag & Drop
Custom Drag & Drop: Enabling drag and drop between a DataView and a grid using DragZone and DropZone extensions. Thanks goes to Nige “Animal” White for putting together this sample.

Consult the 2.1 release notes to get a complete listing of all changes.


Ext GWT 1.0

Ext GWT 1.0 is a Java library that enables developers to create web applications built in pure Java. You can leverage your existing Java skills to create full featured applications in Java using your favorite Java IDE and tools. Code, debug, refactor, and test your Ext GWT applications as you would any other Java application.

Ext GWT has a number of high performance, customizable widgets that provide a great foundation for building your applications. Let us worry about cross-browser issues, html and CSS. Ext GWT is more than just widgets. Ext GWT includes a convenient model abstraction allowing your domain object to be passed transparently between server and client side components. Building a complex application? Ext GWT includes a hierarchical MVC implementation with full history support.

Ext GWT is a native GWT solution using the latest GWT release and takes full advantage of GWT 1.5 and Java 1.5 features.

Ext GWT includes:

  • High performance, customizable UI widgets
  • Full theming support with standard CSS
  • Well designed, consistent and fully documented source code
  • Native GWT solution with no external JavaScript or 3rd party libraries
  • Full remote procedure support using GWT RPC, JSON, and XML
  • Support for Java 1.5 features, including generics, enums, and varargs


GPL License

Until version 2.1 Ext was released under it’s own license, the “Ext License”. That license granted usage (provided certain conditions were met ) under the LGPL license terms. The CSS and images (”Assets”) distributed with Ext before 2.1 had a license all of their own which was not open source compatible at all. We received quite a bit of negative feedback from some prominent members of the open source community about our license not being friendly for open source projects. Some even said Ext was not open source at all since these licenses did not offer the same freedoms that standard open source licenses offer. Since we have been an open source company since our inception, these comments and concerns struck home and we felt a need address the issue.

We are pleased to announce that all of Ext JS 2.1 is now available under the GPL v3. We anticipate this will allow broader usage in open source software and should make licensing questions and choices much easier. To help answer general questions people may have, we have added some useful pages to the extjs.com website: Licensing Overview and Dual Licensing Model.


Ext JS 3.0

We are also pleased to announce that an early rev of Ext 3.0 has hit the SVN trunk! This is pretty early code (release date expected towards end of ‘08) but here are some demos to give an idea of some of the things we have already added. We have big plans for Ext JS 3.0 and I think it is moving in the right direction!

ListView

A high performance tabular view based on the DataView class for when a GridView is overkill.


Button

New super-flexible button implementation.


Toolbar

New grouping in toolbars and enhanced button support.


Toolbar Overflow

Dynamic overflow of toolbars to a menu similar to expected behavior on Windows.


Coolite Studio: Ext Web Controls for ASP.Net

Monday, February 18th, 2008

With Microsoft’s .Net development platform increasing in both popularity and features, we’re receiving more inquiries than ever as to how clients can leverage the Ext framework within .Net web applications. While Ext, being a client-side framework, has always worked with ASP.Net applications, the team at Coolite has taken Ext & .Net integration a step further.

Introducing Coolite Studio

Coolite, the same team that brought you the very cool DateJS date parsing library, have really embraced the Ext framework creating a suite of ASP.Net controls name Coolite Studio that are based on Ext and integrate with Visual Studio 2008:

“The suite of web controls were built with a focus on bringing full Visual Studio Design-Time support to the Ext JavaScript Framework. A marriage of server-side and client-side frameworks.”

Tight Integration, Extensive Features, Support

The suite of controls will include the following:

  • Powerful integration of the Ext JavaScript Framework.
  • Full Design-Time support in Microsoft Visual Studio 2005 & 2008 and Visual Web Developer 2005 & 2008.
  • Drag-and-drop ease of use.
  • Current support for Window, Panel and a many Form Controls including DatePicker, Calendar and HtmlEditor.
  • New Controls being added weekly.
  • Dual Licensed (LGPL 3.0 and Coolite Commercial License).
  • Professional support options available shortly.

Coolite has setup a community forum to help get developers introduced to Coolite Studio and plans to expand their support options in the future.

Coolite Studio is immediately available for download and supports both .Net 2.0 and 3.5.

Ext continues expansion, Now offers training and consulting services

Monday, January 28th, 2008

There are so many framework choices available today and while many are of excellent quality, for many companies, the decision to go with a specific piece of software comes down to the quality of support and services that they are offered. Knowing that they can get help from someone in case of an issue or receive qualified training is of utmost importance since it helps in decreasing maintenance costs, minimizing developer downtime (due to learning a new framework), and supplementing their staff with expert professional services.

Introducing Ext Services

Ext has been quietly offering services for some time now, basically working towards getting certain pieces in place before formalizing the Ext Professional Services division. Many have probably seen the new link at the top of the site explaining the new services being offered by Ext and now it’s time to officially announce it.

The Ext framework provides the tools for developers to create Rich Internet Applications using standards-based technologies and at Ext JS, we want to ensure that our clients can become immediately successful. Our Professional Services team caters to this need by providing consulting and training services to assist our clients in fully leveraging the benefits of the Ext framework.

Training – Get a Head Start

Being one of the most feature-rich frameworks is definitely an advantage for Ext. The team has given thought to so many use-cases and has incorporated functionality that is commonly used by developers on a daily basis. With such an expansive feature-set and API, it definitely takes some time to get familiar with the ins-and-outs of the framework and having a little help certainly goes a long way. That’s why we introduced the Ext Training Curriculum.

Ext provided a flexible training schedule and focused on our specific areas of interest. Coupled with their top-notch instructors, we were able to become effective immediately.

~ Kevin Hoyt
Adobe

We provide a high-impact on-site course which dives straight into the meat of Ext without all of the rudimentary fluff that’s common in other courses. The courses are typically catered towards the specific needs of our clients to ensure they get the most out of the class. Cookie-cutter curriculum certainly has it’s place but we want to offer a personalized training experience and focus on the things important to our clients.

An intangible benefit is that every course is taught be an actual Ext Core Team member. That’s right. These are the same developers that manage and update the Ext framework on a daily basis. This allows us to maintain good quality control for our courses and reassures our clients that they are are being mentored by a true Ext expert.

Consulting – A helping hand

One of the areas of explosive growth for Ext has been our consulting services. Invariably, there will be times when a client will need a helping hand to get a tough project completed or supplement their staff with a mentor or team that can ensure their project is a success.

EXT-JS is a technology partner who understands our design goals and then delivers innovative technical solutions.

~ Jordan Ellington, President
TransPerfect Deal Interactive

As the developers of the Ext framework, we’re in the unique position of having the most comprehensive knowledge of the Ext framework and the capability to fully customize it to suit a client’s unique business needs. Our projects have spanned several areas including:

  • Full application development
  • Custom control creation
  • Code reviews
  • Mentoring and guidance

and in many cases are usually accompanied with training courses to better help our clients be self-sufficient. In fact, one of the newest additions to our training and consulting offerings is the Ext Jumpstart Program. This program provides for 2 days of training followed by 1 day of on-site consulting and mentoring to help our clients get up to speed quickly. On the 3rd day, a Ext Core Team member will work with the client to help build their foundation, develop layouts, understand how to tie things together and, in many cases, develop a working prototype within a couple of hours. This new program has become immensely popular.

Ext Services = Ext Growth

The introduction of our services practice is an extremely important moment for Ext JS. The ability to offer clients services past a simple license or forum support helps to distinguish Ext as a framework which can be leveraged in critical business applications. Many companies want and need to have a certain level of commitment in order to move forward with a technology and we’re providing them with the level of reassurance that we can assist them every step of the way.

To learn more about our services or if you’re interested in scheduling a training session or in need of a mentor, please contact us at services@extjs.com.

Ext 2.0.1 Released

Wednesday, January 23rd, 2008

The Ext team is happy to announce the release of version 2.0.1 of Ext JS. This is a maintenance release that fixes several issues with the 2.0 release. Some notable issues that have been addressed include:

  • Fixed various overflow/scroll issues related to form fields and grid
  • Workaround included for the Firefox 2.0/Mac overflow:auto invisible scrollbar bug
  • Fixed several issues related to destroying form elements
  • Multiple GridView and GroupingView fixes
  • Various other minor bug fixes and documentation updates

For complete details on what’s changed, please have a look at the 2.0.1 release notes. We encourage all Ext 2.0 users to upgrade to 2.0.1 at your earliest convenience.

Ext Rises in Popularity

Monday, December 17th, 2007

Ajaxian.com recently conducted their third annual survey to determine the usage of Ajax/JavaScript libraries. The survey is a great indicator of the market penetration of several well-known (and some not-so-well-known) libraries and frameworks.

The exciting news is that the Ext framework, for the first time, was added to the list and in it’s first year demonstrated it’s popularity. Of the 2,619 respondents, 22.5% were using the Ext framework ranking it 3rd overall.

“Prototype and Script.aculo.us are the only toolkits to maintain a lead over the past three years. However, over all there are no clear winners or losers as even the strongest incumbents (i.e., Prototype and Script.aculo.us) are starting too loose ground. Some frameworks initially popular have faded nearly completely out of the market (i.e., xajax and Rico ) while others have have sprung out of nowhere to become leading tookits (i.e., jQuery and Ext JS).”

The team is very excited about these results and ecstatic that the Ajax community has embraced the Ext framework so heartedly. We plan on continuing to develop new features that will push Ext to the forefront of Ajax and JavaScript development.

Ext 2.0 Beta 1

Thursday, October 11th, 2007

The Ext team is proud to announce that Ext v2.0 Beta 1 is available for download. This release of the Ext framework features updated portal and desktop examples, documentation updates, and bug fixes.

New Sample Application Updates

In our last release, we introduced two new sample applications which were truly a hit with the development community. The two applications, Web Desktop and Customizing: Portals were excellent examples of the capabilities of the new Ext 2.0 framework. For the beta release, we have dramatically improved the features and functionality of both. The Web Desktop has been drastically enhanced to include a start menu as well as functional icons on the desktop. It truly looks like you’re working within an operating system like Windows.

Web Desktop

This sample includes updates to the look, code organization, desktop shortcuts and an excellent StartMenu implementation contributed by Todd Murdock of the Ext community. Thanks also go to Todd for porting the tab scrolling code into the TaskBar so it can handle additional windows without creating additional rows of task items.

Portal

This sample received it’s next major revision including new shortcut classes for columns and portlets, new layout enhancements and an overall smoother API for development.

All of the updated Ext 2.0 Beta 1 samples can be seen at the Ext 2.0 Samples page. Additional samples are available in SVN.

New API Documentation Updates

We’re continuing our efforts to provide top-notch information and documentation for Ext developers. In addition to updating our documentation with new class information, we’ve enlisted the assistance of several community members in developing tutorials specific to Ext 2.0 and migrating existing tutorials to take into account changes in Ext 2.0.

As we mentioned in our last post, our documentation center has been dramatically revamped to help finding information substantially easier.

2.0 Migration

The Ext 2.0 migration guide is near completion and we will be proofreading it shortly to ensure that it meets our high standards of documentation. As soon as it’s been verified, we will make it immediately available to help expedite the transition from Ext v1.x to Ext 2.0.

2.0 Availability

The Ext 2.0 codebase has stabilized and several clients have begun to use Ext 2.0 in production environments. Ext 2.0 is available for download and code updates are available to SVN subscribers in the Ext SVN under branches/ext2.0.

License

Ext 2.0 is being released with the same license options as 1.1. Please visit http://extjs.com/license for more details.

For many companies and products, Open Source licenses are not an option. Ext offers commercial licenses for these situations and for companies using Ext in commercial applications who want to help support the project. It is a non-copyleft license which gives companies complete freedom when integrating Ext in their products and web sites. During the 2.0 prerelease period, estimated until October 31st, we are offering a 25% discount on all commercial license purchases. If you were considering a commercial license, now is the time!

InfoQ Interviews Ext Founder Jack Slocum

Saturday, October 6th, 2007

InfoQ.com, an independent online community focused on change and innovation in enterprise software development, recently interviewed Ext founder Jack Slocum about the latest release of Ext, version 2.0 alpha.

Jack offered great insight into Ext 2.0 and how the framework is positioned in the marketplace:

“Ext can definitely be used as a stand-alone framework. In fact, barring any other requirements, that is the preferred choice as it offers the smallest file footprint and tightest support and integration. However, we also offer the ability to integrate with jQuery, YUI or Prototype as the base library for core services like DOM and event handling, Ajax connectivity and animation. One reason one might opt for such integration is when they have a requirement to use an existing library-specific widget that Ext does not natively offer — the YUI history control is a perfect example.”

“The Ext components were designed to work with other Ext components so the process of using them together is seamless. That type of interoperability can only come when a close knit team is doing the design and development with the same goal in mind, which is something generally not found in open source projects. All of our components have been built from the ground up with presentation, performance, interoperability and extensibility in mind, and we think it shows.”

When asked what the driving force of ExtJS 2.0 is, Jack’s answer was clear and straight to the point:

“Developer productivity and a solid, consistent foundation to build on. Although the 1.x version of Ext was a great library to build on, there were certain areas identified that could be made easier and require less expertise and code by the developer. We want to tackle some of the more difficult problems when building a complex application, such as deferred rendering and component life-cycle and not require developers to handle it manually. The other major improvement for 2.0 in a more robust foundation in place for customizing components (plugins), grouping components (containers) and component initialization. The new consistency across layouts and components means that once you understand how to configure and work with one component in Ext, you will be able to work with any component in the framework in the same way. That leads to faster and easier development for the end user, while sacrificing nothing in terms of Ext’s size or performance.”

You can read the complete interview at InfoQ.com ExtJS Creator Jack Slocum Discusses Upcoming 2.0 Release.