<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Joe Freeman&#039;s Weblog &#187; Ext JS</title>
	<atom:link href="http://joefreeman.co.uk/blog/category/javascript/extjs/feed/" rel="self" type="application/rss+xml" />
	<link>http://joefreeman.co.uk/blog</link>
	<description>Musings on Software Development, etc</description>
	<lastBuildDate>Sat, 27 Mar 2010 15:16:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Book Review: Ext JS 3.0 Cookbook</title>
		<link>http://joefreeman.co.uk/blog/2009/11/book-review-ext-js-3-0-cookbook/</link>
		<comments>http://joefreeman.co.uk/blog/2009/11/book-review-ext-js-3-0-cookbook/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 20:08:05 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Ext JS]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://joefreeman.co.uk/blog/?p=238</guid>
		<description><![CDATA[Packt Publishing sent me a copy of one of their new books for review: Ext JS 3.0 Cookbook, by Jorge Ramon. I have a few criticisms, but am generally very impressed with the book considering it has to be compared with some excellent documentation from the Ext JS team.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.packtpub.com/ext-js-3-0-cookbook?utm_source=joefreeman.co.uk&#038;utm_medium=bookrev&#038;utm_content=blog&#038;utm_campaign=mdb_001631">Packt Publishing</a> contacted me recently (it would seem, among many others) to ask if I&#8217;d like to review one of their new books: <em>Ext JS 3.0 Cookbook</em>, by Jorge Ramon. I was more than happy to oblige, since the book looked like it would contain some interesting material.</p>
<p><a href="http://www.packtpub.com/ext-js-3-0-cookbook?utm_source=joefreeman.co.uk&#038;utm_medium=bookrev&#038;utm_content=blog&#038;utm_campaign=mdb_001631"><img src="http://joefreeman.co.uk/blog/wp-content/uploads/2009/11/ext-js-3.0-cookbook.png" alt="Ext JS 3.0 Cookbook" title="Ext JS 3.0 Cookbook" width="260" height="321" class="aligncenter size-full wp-image-240" /></a></p>
<h2>The Book&#8217;s Structure</h2>
<p>The book comprises &#8220;109 great recipes for building impressive rich internet applications using the Ext JS JavaScript library&#8221; (according to the front-cover—although I notice that the slogan on the picture above is different to my copy).</p>
<p>Each recipe starts with an introduction to the problem, and then a &#8216;How to do it&#8230;&#8217; section. This is usually followed by a &#8216;How it works&#8230;&#8217; section—where Jorge goes a little bit deeper into the inner workings of the Ext JS library. This is, I think, where the book shines. At lot of the examples in the book don&#8217;t seem to be any more special than the samples provided by ExtJS, but this added depth and explanation gives the examples more value than the ExtJS samples.</p>
<p>The book is split into ten chapters:</p>
<ol>
<li>DOM and Data Types, the Ext JS Way</li>
<li>Laying Out a Rich User Interface</li>
<li>Load, Validate, and Submit Forms</li>
<li>Fun with Combo Boxes and Date Fields</li>
<li>Using Grid Panels to Display and Edit Tabular Data</li>
<li>More Applications of Grid and List Views</li>
<li>Keeping Tabs on Your Trees</li>
<li>Making Progress with Menus and Toolbars</li>
<li>Well-charted Territory</li>
<li>Patterns in Ext JS</li>
</ol>
<p>The structure of the book is a little strange. It works fine as a reference book, but when reading from cover to cover, the concepts in the recipes rarely seem to flow from one to the next. For this reason, I think the book may not be ideal for beginners. It also means that some explanations get repeated in different recipes. However, the reference style of the book is benefitted by the &#8216;See also&#8230;&#8217; section at the end of each recipe, which directs you to related recipes.</p>
<p>The book would have gained, I think, from an initial chapter introducing Ext JS, rather than jumping straight into methods for detecting the user&#8217;s browser—which isn&#8217;t a particularly interesting topic to start on anyway.</p>
<h2>Code Samples</h2>
<p>The book is largely made up of code samples, as you would expect. However, I have a few small criticisms to make of the code:</p>
<ul>
<li>I feel that some of the samples are longer than they need to be (often a few pages long—the portlets recipe consists of nine pages of code interspersed with a few comments).</li>
<li>The choice of variable names is sometimes poor (although this may be following from the Ext JS convention).</li>
<li>Occasionally the formatting of the code is unhelpful—I noticed a comment had been wrapped, and on some examples the indentation was inconsistent.</li>
<li>Some of the code lines are highlighted in bold to make them stand out, but I found that quite often this was over-used, or highlighted the wrong areas—so turned out to be not so helpful.</li>
</ul>
<p>This is nit-picking really though—the code is generally quite appropriate to the topics in question, and if you&#8217;re familiar with Ext JS, you shouldn&#8217;t have problems understanding the code—but I&#8217;d have expected more attention to these areas by a publishing company that has probably never published a book <em>without</em> source code.</p>
<h2>Screenshots</h2>
<p>Some of the screenshots are not very clear and the annotations are sometimes a little confusing. In one case, the same half-page screenshot seemed to get duplicated four times, with very minor changes between them.</p>
<p>A little colour and better annotations would have really benefitted the book, especially since it is largely focussed on user interface design (and RRPs at £30.99/$49.99!)</p>
<h2>Further Observations</h2>
<p>I was surprised to see the occasional use of PHP, which didn&#8217;t actually seem to be required to explain the topic. Giving a snippet of raw JSON may have been more appropriate.</p>
<p>I&#8217;m not sure how other books from Packt are structured, but I think the book would have benefitted from &#8217;side boxes&#8217; in the margin giving little extra hints, or explaining certain parts of the code in more detail. In my experience, this is a common and useful feature of computing books.</p>
<h2>Conclusion</h2>
<p>It was very nice to see a chapter on the use of design patterns in Ext JS. This is a topic that I found difficult when I started working with the library, and I didn&#8217;t manage to find much helpful material online at the time. The recipe on creating customised &#8216;vtypes&#8217; was also interesting.</p>
<p>I feel like I&#8217;ve come up with plenty of criticisms, but in general I think the book is worth reading, even if just for the ~50% original material (which isn&#8217;t already available on the Ext JS samples page), and for the brief-but-valuable explanations of how things are working &#8216;under the hood&#8217;.</p>
<p>As a reference book, it feels very complete. I haven&#8217;t been able to think of any topics that it misses out. Mixing the recipes together should result in a substantial meal, and some very satisfied clients.</p>
<p>Thank you <a href="http://www.packtpub.com/ext-js-3-0-cookbook?utm_source=joefreeman.co.uk&#038;utm_medium=bookrev&#038;utm_content=blog&#038;utm_campaign=mdb_001631">Packt</a> for sending me the book, and thanks <a href="http://www.miamicoder.com/">Jorge</a> for putting so many useful examples together in one resource.</p>
<p><strong>Update:</strong> I requested a link to some sample content: here&#8217;s the whole of Chapter 3, <a href="http://www.packtpub.com/files/8709-ext-js-cookbook-sample-chapter-3-load-validate-and-submit-forms.pdf"><em>Load, Validate, and Submit Forms</em></a>, for you to download.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefreeman.co.uk/blog/2009/11/book-review-ext-js-3-0-cookbook/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Stock Quotes with Ext JS Charts</title>
		<link>http://joefreeman.co.uk/blog/2009/07/stocks-with-ext-js-charts/</link>
		<comments>http://joefreeman.co.uk/blog/2009/07/stocks-with-ext-js-charts/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 23:02:01 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Ext JS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://joefreeman.co.uk/blog/?p=4</guid>
		<description><![CDATA[An example to display stock indexes in an Ext JS chart. Including an introduction to Ext JS, a simple introductory Ext JS example and an introduction to the new charts feature. Concludes with a more comprehensive demo, showing some more of Ext's features.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll keep the introduction to <a href="http://extjs.com">Ext JS</a> brief, and then give a short primer to using Ext. Skip to the charts section if you&#8217;re already familiar with Ext. Or skip straight to the end if you just want to see the final demo.</p>
<p>Ext JS is yet another JavaScript library. However the emphasis is on UI widgets that allow you to build user interfaces in the browser. The concept is far from new, but the way Ext JS stands out from the contenders must be embarrassing. The library&#8217;s widgets are visually stunning, feature-rich, and yet still maintains high performance.</p>
<p>I will admit that I hadn&#8217;t heard of Ext JS before working on a project last year that used it. I&#8217;ve been doing freelance web development for about five years and I tend to keep quite up-to-date with web technologies, so I&#8217;m surprised that it had slipped under my radar.</p>
<p>Fairly recently, the team <a href="http://extjs.com/blog/2009/06/03/ext-js-30-rc2-release-stable-robust-and-enhanced/">announced</a> the latest release candidate of Ext 3.0. I wanted to experiment with some of the lesser-hyped new features, and so I&#8217;ve been working on a small experiment to display stock indexes using the new charts feature.</p>
<h2>Hello, world!</h2>
<p>Let&#8217;s start by walking through a really simple Ext example before we look at the charts.</p>
<p><a href="http://extjs.com/products/extjs/download.php">Download</a> the latest Ext release. Setup a simple HTML page and add a few includes:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;ext-3.0-rc3/resources/css/ext-all.css&quot; /&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;ext-3.0-rc3/adapter/ext/ext-base.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;ext-3.0-rc3/ext-all-debug.js&quot;&gt;&lt;/script&gt;</pre></td></tr></table></div>

<p>At this point, we should be able to load the blank page in the browser without any errors.</p>
<p>The next step is to write some code to do something with the Ext library. So as not to upset the gods, we&#8217;re going to make a pop-up &#8216;hello world&#8217; window. The following is JavaScript code, so put it in a &lt;script&gt; tag or an external .js file.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">onReady</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">Window</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    title<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Hello, world!'</span><span style="color: #339933;">,</span>
    width<span style="color: #339933;">:</span> <span style="color: #CC0000;">280</span><span style="color: #339933;">,</span>
    height<span style="color: #339933;">:</span> <span style="color: #CC0000;">120</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>We use <code>Ext.onReady(...)</code> to setup a callback for when the DOM is loaded. This callback will create a new <code>Ext.Window</code> object, and show it. The parameter to the <code>Ext.Window</code> constructor is a configuration object.</p>
<p>The concept of configuration objects is used extensively throughout Ext, and it can be rather fiddly and difficult to get used to. You <i>have</i> to keep the Ext documentation open (see below) to know what parameters to use. In our simple example, all we do is specify the title and dimensions of the window.</p>
<p>Load the page in your browser. The result should look something like this:</p>
<p><a href="http://joefreeman.co.uk/projects/extstock/part-1.html"><img src="http://joefreeman.co.uk/blog/wp-content/uploads/2009/07/hello-world.png" alt="hello-world" title="hello-world" width="290" height="128" class="aligncenter size-full wp-image-11" /></a></p>
<p>Notice that you can drag the window around the screen and resize it to your hearts content.</p>
<p>See the <a href="http://joefreeman.co.uk/projects/extstock/part-1.html">demo</a> or <a href="http://joefreeman.co.uk/projects/extstock/stocks-with-ext-js-charts.zip">download</a> the code.</p>
<p>For a nice collection of more advanced examples, check out the <a href="http://extjs.com/deploy/dev/examples/samples.html">samples</a> on the Ext site (they are also contained in the Ext download). These samples are great. My only criticism is that they can be a bit inconsistent in the way they implement features.</p>
<p>Another indispensable resource is the Ext <a href="http://extjs.com/deploy/dev/docs/">documentation</a> (this is also included in the download).</p>
<h2>Ext JS Charts</h2>
<p>In a way, it&#8217;s a shame that Flash has been used to implement the charts feature, since the library has achieved so much without resorting to it in the past. Nevertheless, the actual Flash applet has been well contained and even resizes smoothly with it&#8217;s container.</p>
<p>We can build on our simple example from above to add a chart to the window.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">onReady</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #003366; font-weight: bold;">var</span> store <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">JsonStore</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'data.php'</span><span style="color: #339933;">,</span>
    baseParams<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
      symbol<span style="color: #339933;">:</span> <span style="color: #3366CC;">'GOOG'</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    autoLoad<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
    root<span style="color: #339933;">:</span> <span style="color: #3366CC;">'data'</span><span style="color: #339933;">,</span>
    fields<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'date'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'close'</span><span style="color: #009900;">&#93;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">Window</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    title<span style="color: #339933;">:</span> <span style="color: #3366CC;">'GOOG'</span><span style="color: #339933;">,</span>
    width<span style="color: #339933;">:</span> <span style="color: #CC0000;">400</span><span style="color: #339933;">,</span>
    height<span style="color: #339933;">:</span> <span style="color: #CC0000;">300</span><span style="color: #339933;">,</span>
    items<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
      <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">chart</span>.<span style="color: #660066;">LineChart</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        store<span style="color: #339933;">:</span> store<span style="color: #339933;">,</span>
        xField<span style="color: #339933;">:</span> <span style="color: #3366CC;">'date'</span><span style="color: #339933;">,</span>
        yField<span style="color: #339933;">:</span> <span style="color: #3366CC;">'close'</span>
      <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#93;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>We are introducing two new concepts here. First of all, the use of a &#8217;store&#8217;. In this case, a <code>JsonStore</code>. To quote the documentation:</p>
<blockquote><p>The Store class encapsulates a client side cache of Record objects which provide input data for Components [...]</p></blockquote>
<p>So basically, the store takes care of fetching and storing our data. The <code>JsonStore</code> uses a <code>JsonReader</code> to fetch the data in <a href="http://www.json.org">JSON</a> format, keeping the data completely separate from the UI component. The data is then represented internally as a series of <code>Record</code>s.</p>
<p>Let&#8217;s look at the configuration parameters we have set. The first parameter, <code>url</code>, is the URL that we will be loading the data from and <code>baseParams</code> specifies the parameters to send to this URL. By default the store doesn&#8217;t attempt to load the data straight away, so we specify the <code>autoLoad</code> parameter so that we don&#8217;t have to call <code>store.load()</code> ourselves later on. The <code>root</code> parameter tells the store where to look in the returned object for the bulk of the records, and <code>fields</code> is a short-hand way to specify the structure of the individual records.</p>
<p>The second new concept we have introduced is the addition of a component to the window. We have done this by specifying an array of components in the &#8216;items&#8217; property. The single item that we are adding is a <code>LineChart</code> component. The configuration here just links the component to the store we have defined, and specifies the fields to bind to the axes of the chart.</p>
<p>Once the store has been loaded, we should end up with this:</p>
<p><a href="http://joefreeman.co.uk/projects/extstock/part-2.html"><img src="http://joefreeman.co.uk/blog/wp-content/uploads/2009/07/goog.png" alt="goog" title="goog" width="410" height="311" class="aligncenter size-full wp-image-13" /></a></p>
<p>See the <a href="http://joefreeman.co.uk/projects/extstock/part-2.html">demo</a> or <a href="http://joefreeman.co.uk/projects/extstock/stocks-with-ext-js-charts.zip">download</a> the code.</p>
<p>The current Ext documentation for styling the charts is fairly minimal. Since the underlying Flash applet for the charts is based on the one from the Yahoo UI Library, further information on styling the charts can be obtained from <a href="http://developer.yahoo.com/yui/charts/">their documentation</a>.</p>
<h2>Fetching the Data</h2>
<p>Let&#8217;s take a look now at the server-end of the process.</p>
<p>The data is generated by a PHP script which in turn gets the stock data from Yahoo. Yahoo kindly provide a CSV-formatted data set of the daily stock prices (including open, close, high and low values) which go back about five years. We don&#8217;t want to be pumping this much data to the browser, so we will take a few steps:</p>
<ol>
<li>Fetch the data if not already cached</li>
<li>Extract the closing price for each day</li>
<li>Cache the data</li>
<li>Choose an appropriate range of dates to display</li>
<li>Sample the remaining data to leave us with a suitable number of points that can be plotted</li>
<li>Return the data encoded as JSON</li>
</ol>
<p>We now have a simple web service that allows us to specify a number of parameters:</p>
<ul>
<li><b>symbol</b> — The stock ticker symbol. Required. Note that because we are using the Yahoo stock data we are limited to stocks listed on the NASDAQ.</li>
<li><b>start</b> — The start date. Specified as a Unix timestamp. Defaults to roughly one year ago.</li>
<li><b>span</b> — The timespan to get data for. Also given as a Unix timestamp. Defaults to roughly one year.</li>
<li><b>points</b> — The number of points to sample. Defaults to 20.</li>
</ul>
<p>An example result from the service would look a little like this:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#123;</span><span style="color: #3366CC;">&quot;symbol&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;MSFT&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;data&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
  <span style="color: #009900;">&#123;</span><span style="color: #3366CC;">&quot;date&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;2008-07-24&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;close&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">25</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
  <span style="color: #009900;">&#123;</span><span style="color: #3366CC;">&quot;date&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;2008-08-12&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;close&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">28</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
  <span style="color: #006600; font-style: italic;">//...</span>
<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>I won&#8217;t paste the PHP script here. It can, however be <a href="http://joefreeman.co.uk/projects/extstock/stocks-with-ext-js-charts.zip">downloaded</a>.</p>
<p>Once the data has been successfully loaded, an event is raised, which the chart has been listening for. The chart can then re-draw itself using the new data.</p>
<h2>Taking Things Further</h2>
<p>In an attempt to mature our example a little, and to highlight a few of Ext&#8217;s other features, I&#8217;ve put together a more substantial example. See the screenshot below, and refer to the <a href="http://joefreeman.co.uk/projects/extstock/">live demo</a>.</p>
<p><a href="http://joefreeman.co.uk/projects/extstock/"><img src="http://joefreeman.co.uk/blog/wp-content/uploads/2009/07/extstock.png" alt="extstock" title="extstock" width="500" height="324" class="aligncenter size-full wp-image-56" /></a></p>
<p>I won&#8217;t go into much detail here, other than to list some of the features that I&#8217;ve used:</p>
<ul>
<li>A <code>Viewport</code> together with the <code>BorderLayout</code> to ensure that the interface takes over all the space offered by the browser window.</li>
<li>A modal pop-up window which contains an auto-complete <code>ComboBox</code>. A list of the NASDAQ-100 are presented for the user to choose from.</li>
<li>A <code>TabPanel</code> to organise the different stocks that have been loaded. Selecting a different tab will change the chart being displayed, and closing a tab will unload the data and chart.</li>
<li>A <code>ListView</code> component, which is the new lightweight version of the <code>GridPanel</code>.</li>
<li>Some more advanced features of the <code>Chart</code> object—including making use of the <code>TimeAxis</code>, linking mouse movements to the <code>ListView</code> component, and making some changes to the chart&#8217;s style.</li>
</ul>
<p>I have left the JavaScript <a href="http://joefreeman.co.uk/projects/extstock/js/extstock.js">un-minified</a> so feel free to take a look at it.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefreeman.co.uk/blog/2009/07/stocks-with-ext-js-charts/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
