<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-878017715603070891</id><updated>2025-09-23T14:20:59.943-07:00</updated><category term="doctrine"/><category term="ext js form before unload"/><category term="ext js form load change validation"/><category term="ext js model field convert association"/><category term="ext js model manymany"/><category term="extjs ext js ajax handle error events jsfiddle"/><category term="extjs ext js ajax jsfiddle"/><category term="extjs ext js error exception handling"/><category term="extjs ext js mvc model view controller dynamic load jsfiddle"/><category term="extjs mvc video jsfiddle"/><category term="extjs store single record id"/><category term="extjs viewport reference center region controller"/><category term="netbeans ext js code completion javascript extjs"/><category term="postgres"/><category term="store filter sort group php yii"/><category term="yii"/><title type='text'>ExtJS Tutorials</title><subtitle type='html'>Learn tips, tricks, and best practices for Ext-JS</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-2173297140177287923</id><published>2013-07-31T13:52:00.001-07:00</published><updated>2013-07-31T13:52:08.055-07:00</updated><title type='text'>Store Selection Across Multiple Views</title><summary type="text">Here&#39;s a video on synchronizing store selection across multiple views of the same type, and of different types

&amp;nbsp;



Here&#39;s the source code.</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/2173297140177287923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2013/07/store-selection-across-multiple-views_31.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/2173297140177287923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/2173297140177287923'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2013/07/store-selection-across-multiple-views_31.html' title='Store Selection Across Multiple Views'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/M95ltcRtGOg/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-5307211721101774422</id><published>2013-07-01T03:09:00.001-07:00</published><updated>2013-07-01T12:54:16.058-07:00</updated><title type='text'>Animating windows in ExtJS</title><summary type="text">The following code will override the Window class, causing animation on show, close, maximize, and restore. 

You need to set {maximizable:true} in your Window config to get the maximize button.




Ext.window.Window.override({

  animateTarget: Ext.getDoc(), //animate on show/close from top left of document
  
  maximize: function(){
    this.callParent([true]); //animate
  },

  restore: </summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/5307211721101774422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2013/07/extjs-window-animate.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/5307211721101774422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/5307211721101774422'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2013/07/extjs-window-animate.html' title='Animating windows in ExtJS'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-7611424756457294546</id><published>2013-06-14T22:47:00.000-07:00</published><updated>2013-07-01T03:05:24.501-07:00</updated><title type='text'>Prompt user before leaving page if a form is dirty</title><summary type="text">Ext.application({

    init: function(){

        Ext.EventManager.addListener(window, &#39;beforeunload&#39;, this.onBeforeUnload, this, {
            normalized:false //we need this for firefox
        });    
    },

    onBeforeUnload: function(e){

        var showMessage = false;
        var MESSAGE = &#39;You have unsaved changes.&#39;;

        Ext.Array.each(Ext.ComponentQuery.query(&#39;form&#39;), function (</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/7611424756457294546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2013/06/prompt-user-before-leaving-page-if-form.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/7611424756457294546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/7611424756457294546'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2013/06/prompt-user-before-leaving-page-if-form.html' title='Prompt user before leaving page if a form is dirty'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-157713983831631736</id><published>2013-02-21T14:14:00.001-08:00</published><updated>2013-03-24T19:18:25.662-07:00</updated><title type='text'>Enable CORS in a Spring MVC REST API for ExtJS</title><summary type="text">Let&#39;s say you want to run your ExtJS application on example.com, but run your REST API at example-api.com . Normally, you cannot do this without resorting to JSONP (GETs only), or a server proxy, due to security restrictions. However, it can be done safely using CORS, which modern browsers support.

I&#39;ve been using Java Spring Roo for creating my REST API. Unfortunately, it does not support CORS </summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/157713983831631736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2013/02/enable-cors-in-spring-mvc-rest-api-for.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/157713983831631736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/157713983831631736'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2013/02/enable-cors-in-spring-mvc-rest-api-for.html' title='Enable CORS in a Spring MVC REST API for ExtJS'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-1086807733970916440</id><published>2012-08-12T16:39:00.002-07:00</published><updated>2012-08-12T16:39:35.089-07:00</updated><title type='text'>How to change the LoadMask text and target</title><summary type="text"></summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/1086807733970916440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/08/extjs-custom-loadmask-change-text.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/1086807733970916440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/1086807733970916440'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/08/extjs-custom-loadmask-change-text.html' title='How to change the LoadMask text and target'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-3111200180817117286</id><published>2012-08-12T16:23:00.002-07:00</published><updated>2012-08-12T16:24:15.673-07:00</updated><title type='text'>How to change the default presence validation message</title><summary type="text">The default model &quot;presence&quot; validation message is &quot;must be present&quot;, which is kinda ugly.

Here&#39;s how to change it to something better:


// set this near the beginning of your program:

Ext.data.validations.presenceMessage = &quot;Required&quot;;
</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/3111200180817117286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/08/extjs-validations-must-be-present.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3111200180817117286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3111200180817117286'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/08/extjs-validations-must-be-present.html' title='How to change the default presence validation message'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-16803415045005140</id><published>2012-08-11T14:36:00.001-07:00</published><updated>2012-08-11T14:54:01.764-07:00</updated><title type='text'>Using ExtJS and JQuery on the same page</title><summary type="text">This widget shows an ExtJS Panel and Image component, along with the JQuery DeepLiquid JCrop widget, which allows you to select a crop area on an image.
Try it out by dragging your mouse over the image. You can also move the &quot;crop&quot; around.
&amp;nbsp;

</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/16803415045005140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/08/extjs-jquery-together-same.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/16803415045005140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/16803415045005140'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/08/extjs-jquery-together-same.html' title='Using ExtJS and JQuery on the same page'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-1235503814566297281</id><published>2012-07-26T15:11:00.002-07:00</published><updated>2012-07-26T15:12:26.078-07:00</updated><title type='text'>A function to concatenate field values in a store</title><summary type="text">Below is a function to concatenate the values in a field in a store.

This is similar to Store.sum();




Ext.data.Store.override({
    
    concat: function(field, grouped, separator){
        
        if(typeof separator === &#39;undefined&#39;){
            separator = &#39;, &#39;;
        }
        
        if (grouped &amp;&amp; this.isGrouped()) {
            return this.aggregate(this.getConcat, this, true, [</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/1235503814566297281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/07/store-concatenate-field.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/1235503814566297281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/1235503814566297281'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/07/store-concatenate-field.html' title='A function to concatenate field values in a store'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-6288517529225001810</id><published>2012-07-18T19:54:00.000-07:00</published><updated>2012-08-08T23:46:02.506-07:00</updated><title type='text'>How to capture the HTMLEditor&#39;s onpaste event</title><summary type="text">The key to capturing the onpaste event for the HTMLEditor component is to wait for its initialize event to fire and then add the onpaste handler to its document body:




{
xtype: &#39;htmleditor&#39;,
listeners: {
  initialize: function(cmp) {

    Ext.EventManager.addListener(

      cmp.iframeEl.dom.contentWindow.document.body

      , &#39;paste&#39;

      , function(e, elem){
          console.log(</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/6288517529225001810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/07/htmleditor-onpaste.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/6288517529225001810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/6288517529225001810'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/07/htmleditor-onpaste.html' title='How to capture the HTMLEditor&#39;s onpaste event'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-1003511427804790664</id><published>2012-07-16T14:26:00.001-07:00</published><updated>2012-08-08T23:47:33.760-07:00</updated><title type='text'>How to simulate AJAX requests in JSFiddle</title><summary type="text">
set the URL as /echo/json/ &amp;nbsp;[you need that last slash]
if you are doing a read action (such as in Model.load) you need to set the proxy.actionMethods.read to &quot;POST&quot;

set &quot;json&quot; as an extraParam and pass the json string that you want echoed back

you can optionally set a delay in extraParams



Here is a little function to help you simulate an AJAX request for a proxy:

function sim(proxy, </summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/1003511427804790664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/07/jsfiddle-ajax-simulate-extjs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/1003511427804790664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/1003511427804790664'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/07/jsfiddle-ajax-simulate-extjs.html' title='How to simulate AJAX requests in JSFiddle'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-178235877991636479</id><published>2012-07-15T21:41:00.002-07:00</published><updated>2012-07-15T21:41:44.156-07:00</updated><title type='text'>This blog, in French</title><summary type="text">The smart guys at Developpez.com (a very popular French dev portal) asked to translate and post some of my blog articles on their site. Here it is:

http://neilmcguigan.developpez.com/


</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/178235877991636479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/07/this-blog-in-french.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/178235877991636479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/178235877991636479'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/07/this-blog-in-french.html' title='This blog, in French'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-3025630475302289921</id><published>2012-07-05T16:38:00.002-07:00</published><updated>2012-07-05T16:38:40.586-07:00</updated><title type='text'>ExtJS Trouble-shooting</title><summary type="text">Uncaught Error: The following classes are not declared even if their files have been loaded: &#39;My.folder.File&#39;. Please check the source code of their corresponding files for possible typos: &#39;app/folder/File.js ext-all-dev.js:9655
Ext.apply.onFileLoaded ext-all-dev.js:9655
(anonymous function) ext-all-dev.js:2953
Ext.apply.injectScriptElement.onLoadFn


This means that you required the file </summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/3025630475302289921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/07/extjs-trouble-shooting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3025630475302289921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3025630475302289921'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/07/extjs-trouble-shooting.html' title='ExtJS Trouble-shooting'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-2815660162523282626</id><published>2012-06-25T14:06:00.000-07:00</published><updated>2012-06-25T14:10:21.928-07:00</updated><title type='text'>RowEditing Plugin: validateedit event</title><summary type="text">The rowediting plugin fires a validateedit event after its Update button is clicked.

It is fired before the record is populated with the form data.

Here is how to handle the validateedit event if you want to validate a model and show its validation errors:

The editor.editor.form reference is to a BasicForm and not a Form Panel.

validateedit: function(editor, e, eOpts){
    var newModel = </summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/2815660162523282626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/06/rowediting-plugin-validateedit-event.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/2815660162523282626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/2815660162523282626'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/06/rowediting-plugin-validateedit-event.html' title='RowEditing Plugin: validateedit event'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-3028016508195876361</id><published>2012-06-25T10:40:00.002-07:00</published><updated>2012-06-25T10:41:24.801-07:00</updated><title type='text'>ExtJS Faster Loading</title><summary type="text">Here&#39;s how to make your app appear to load faster. It&#39;s a trick used in iOS programming:

1. take a screenshot of your application, in its initial but loaded state *
2. blur or mask this image somewhat
3. load this image first, and set it as the HTML background image
4. load ExtJS and your application
5. start your application
6. the app will start and show its interface, and the viewport will </summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/3028016508195876361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/06/extjs-faster-loading.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3028016508195876361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3028016508195876361'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/06/extjs-faster-loading.html' title='ExtJS Faster Loading'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-3166939888399208760</id><published>2012-06-16T14:51:00.002-07:00</published><updated>2012-07-01T13:16:00.064-07:00</updated><title type='text'>Polymorphic JSON: Changing the model type based on the response</title><summary type="text">I am using the&amp;nbsp;Party Model, and needed to create an Individual or Organization model depending on the JSON response. Had to override Ext.data.reader.Reader to do it. Ideally, Sencha would fire a &quot;creating model&quot; event or hook that would let us pick the model at Read time. The system looks like this:

PARTY
id
name
getText() - returns name

ORGANIZATION : PARTY
doingBusinessAs
getText() - </summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/3166939888399208760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/06/polymorphic-json-change-model-subclass.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3166939888399208760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3166939888399208760'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/06/polymorphic-json-change-model-subclass.html' title='Polymorphic JSON: Changing the model type based on the response'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-3191161098039315477</id><published>2012-05-25T12:20:00.002-07:00</published><updated>2012-07-20T16:11:04.402-07:00</updated><title type='text'>Rules for HasOne and BelongsTo Associations in ExtJS</title><summary type="text">
Put the proxy in the model, unless you have a very good reason not to [1]
Always use fully qualified model name
Always set the getterName
Always set the setterName
Always set the associationKey, if the foreign object is returned in the same response as this object
Always set the foreignKey, if you want to load the foreign object at will
Consider changing the instanceName to something shorter
The</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/3191161098039315477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/05/extjs-belongsto-association-rules.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3191161098039315477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3191161098039315477'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/05/extjs-belongsto-association-rules.html' title='Rules for HasOne and BelongsTo Associations in ExtJS'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-5391028989661137955</id><published>2012-05-25T11:50:00.003-07:00</published><updated>2013-05-16T11:48:54.842-07:00</updated><title type='text'>Rules for HasMany Associations in ExtJS</title><summary type="text">
Always put your Proxies in your Models, not your Stores, unless you have a very good reason not to *
Always require your child models if using them in hasMany relationships. **&amp;nbsp;
Always use foreignKey if you want to load the children at will
Always use associationKey if you return the children in the same response as the parent
You can use both foreignKey and associationKey if you like
</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/5391028989661137955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/05/extjs-hasmany-relationships-rules.html#comment-form' title='33 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/5391028989661137955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/5391028989661137955'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/05/extjs-hasmany-relationships-rules.html' title='Rules for HasMany Associations in ExtJS'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>33</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-4558431266608392628</id><published>2012-05-21T11:33:00.001-07:00</published><updated>2012-05-21T11:33:08.136-07:00</updated><title type='text'>Javascript SOLID principles</title><summary type="text">This guy seems to know what he&#39;s talking about:

http://aspiringcraftsman.com/series/solid-javascript/</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/4558431266608392628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/05/javascript-solid-principles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/4558431266608392628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/4558431266608392628'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/05/javascript-solid-principles.html' title='Javascript SOLID principles'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-3856874567981813947</id><published>2012-05-19T11:17:00.002-07:00</published><updated>2012-05-19T11:19:53.225-07:00</updated><title type='text'>ExtJS History is backwards</title><summary type="text">Ext JS&#39;s History navigation is backwards. I know why they did it that way (in the name of cross-browser compatibility), and most people, like balupton&#39;s history.js, get it wrong too.



In your app, you want to change the URL bar AFTER you navigate, not before.



Here&#39;s why:


Your app should work without browser history manipulation, so you need some sort of navigation system in the first place</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/3856874567981813947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/05/extjs-history-is-backwards.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3856874567981813947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3856874567981813947'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/05/extjs-history-is-backwards.html' title='ExtJS History is backwards'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-2561510162018388739</id><published>2012-05-15T14:10:00.003-07:00</published><updated>2012-05-15T14:11:10.086-07:00</updated><title type='text'>Disabling Chrome&#39;s Translate Function in your ExtJS Application</title><summary type="text">To disable Chrome&#39;s Google Translate function in your ExtJS app, add this to your &amp;lt;head&amp;gt;:

HTML 5:

&amp;lt;meta name=&quot;google&quot; value=&quot;notranslate&quot;&amp;gt;</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/2561510162018388739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/05/disable-chrome-translate-extjs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/2561510162018388739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/2561510162018388739'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/05/disable-chrome-translate-extjs.html' title='Disabling Chrome&#39;s Translate Function in your ExtJS Application'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-4829429281484174318</id><published>2012-04-25T20:04:00.000-07:00</published><updated>2012-04-25T20:04:10.940-07:00</updated><title type='text'>Ext Replace History</title><summary type="text">You can use Ext.History.add() to change the URL bar and add an item to the browser&#39;s history. For example, you could go from example.com#contacts to example.com#email



This doesn&#39;t reload the page, but you can listen for the change and load different forms in Ext, for example




Today, however, I needed to change the URL without adding an item to History, yet still fire the Ext.History.change </summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/4829429281484174318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/04/ext-replace-history.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/4829429281484174318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/4829429281484174318'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/04/ext-replace-history.html' title='Ext Replace History'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-1334633789795502345</id><published>2012-04-17T13:51:00.000-07:00</published><updated>2012-04-17T13:51:14.608-07:00</updated><title type='text'>Sencha Architect is out</title><summary type="text">http://www.sencha.com/products/architect 

If you bought Ext Designer this year, you get Architect for free.

Formerly Sencha Designer 2, and before that Ext Designer. Registering my version now and will post some videos soon.</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/1334633789795502345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/04/sencha-architect-is-out.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/1334633789795502345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/1334633789795502345'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/04/sencha-architect-is-out.html' title='Sencha Architect is out'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-3943489118611683553</id><published>2012-04-17T13:49:00.004-07:00</published><updated>2012-04-17T13:49:45.439-07:00</updated><title type='text'>ExtJS 4.1 Docs are finally up</title><summary type="text">Looks like 4.1 is ready for prime-time

http://docs.sencha.com/ext-js/4-1/</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/3943489118611683553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/04/extjs-41-docs-are-finally-up.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3943489118611683553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/3943489118611683553'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/04/extjs-41-docs-are-finally-up.html' title='ExtJS 4.1 Docs are finally up'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-8180890769601493465</id><published>2012-04-03T14:09:00.002-07:00</published><updated>2012-04-03T14:09:55.649-07:00</updated><title type='text'>ExtJS 4.1 Release Candidate 2 is out</title><summary type="text">http://www.sencha.com/blog/ext-js-4-1-rc-2-released/ </summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/8180890769601493465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/04/extjs-41-release-candidate-2-is-out.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/8180890769601493465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/8180890769601493465'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/04/extjs-41-release-candidate-2-is-out.html' title='ExtJS 4.1 Release Candidate 2 is out'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-878017715603070891.post-8010188530021357615</id><published>2012-04-03T11:50:00.001-07:00</published><updated>2012-04-03T11:51:18.977-07:00</updated><title type='text'>Looks like Chrome 18 breaks Sencha ExtJS</title><summary type="text">Using Chrome 18, try clicking the reload button twice here:

http://dev.sencha.com/deploy/ext-4.0.7-gpl/examples/charts/Line.html 

Many of the buttons in my app started disappearing in Chrome 18 only...hopefully will be fixed in 19!</summary><link rel='replies' type='application/atom+xml' href='http://extjs-tutorials.blogspot.com/feeds/8010188530021357615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/04/looks-like-chrome-18-breaks-sencha.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/8010188530021357615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/878017715603070891/posts/default/8010188530021357615'/><link rel='alternate' type='text/html' href='http://extjs-tutorials.blogspot.com/2012/04/looks-like-chrome-18-breaks-sencha.html' title='Looks like Chrome 18 breaks Sencha ExtJS'/><author><name>Neil McGuigan</name><uri>http://www.blogger.com/profile/14122981831780837323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>