Javascript ‘==’ operator and indexOf failure

The other day my collegue, Steve Skrla, was having an infinite recursion issue caused by my javascript clone function. We discovered that the for some reason it was equating a string value with an array value. After a little more digging Steve found the culprit. Simply put, Javascript’s == operator is broken.

I did a little more digging and discovered exactly what Javascript is doing. It turns out that when comparing anything to a string, Javascript first runs a toString on the other item being compared.

Continue reading

ExtJS – Update to ComboBox Replacement

Some people were asking for some additions to my ExtJS ComboBox replacement, so here is a quick little update.

This version adds in some minor fixes and a new feature. The ComboBox will now properly consume an existing combo. If you do not have selected=”true” on one of the options then this combo will clear the value of the ExtJS Combo box so that no value is selected.

I need to add some more documentation and testing and then I will make it an official UX component. I am also working on some examples of Ext’s combo vs this combo to show you why it is better.

Continue reading

ExtJS / Javascript – Deep Copy

We often need to do deep copies of Javascript objects so that we can modify the copy without it affecting the original. I have created the following clone function that does this quickly and easily; however, it does have limitations. If you clone an instance of, lets say, an Ext.Panel, Javascript’s instanceof function will fail to recognize it as an instance of Ext.Panel. From what I can gather, this is because the Javascript engine has some kind of internal reference to an object’s constructor and instanceof doesn’t actually look at the constructor we are able to modify… lets look at an example so it is more clear:

Continue reading

ExtJS Performance – Element click events

A question appeared on the ExtJS forums today regarding how to bind event listeners on multiple links that are generated from the server.  Bind an event listener to each link, right?  Wrong!  This is wrong in the sense that it wastes system resources and is unnecessary.  Can you imagine how much resources TreePanel would take up if it bound a click listener on every single node element!? Oh wait… that’s probably what you though it did :-).  But it doesn’t. 
Continue reading

ExtJS ComboBox Replacement

I consider myself to be an expert in ExtJS. However, there is one component that I have to lookup how to use just about every single time I use it: Ext.form.ComboBox. For me, the default implementation just doesn’t cut it. There are a number of problems I have all the time:

  1. Forgetting to set “mode” to remote when I provide a store that is obviously “remote”
  2. Drop-down list width sometimes is smaller than the combo box itself
  3. I hate having to setup a store every time I need a remote ComboBox
  4. After the store loads, the value in the input box is not automatically replaced with displayValue

Maybe these issues are more my issues, but I maintain that ComboBox is one of poorer ExtJS components. Here is my replacement:

Please see the new code here: Update to ComboBox Replacement

Use it like this:

Edited to set lastQuery properly so ComboBox does not load the store twice when autoLoad is set to true (default).

ExtJS – QueryStore & Store Query Language

This is purely conceptual at this point but I would love to have this feature. It would be similar to TrimQuery but be based on Ext Stores. I would love to be able to do this:

[Edit]

Let me preface this with the fact that this is NOT server side SQL. This SQL never gets sent to the server. This is a very simple client side implementation that is only used for joining together data from multiple stores into an intermediary store which is useful for displaying grids that don’t match your server side data model.  It saves you from having to create one-off data providers for these grids and having to migrate changes to your other stores by hand.

[/Edit]

Continue reading

ExtJS Performance – Event Listener Cleanup

Its a pretty simple code snippet but the overarching topic, performance (especially in ExtJS), can be complicated and developers really need to be cognizant of performance impacts.  Especially so when its running on the client which you have no control over the performance specs of the machine.

There has long been the problem in Ext with the issue of cleaning up event listeners after the listening component has been destroyed.  Until now, developers have had to code custom destructors to handle this cleanup.

Continue reading