Maybe a bit old topic, but I've been using ExtJS for 4 months now at work. Basically the team consists of client-side ExtJS developers and server-side PHP developers (who mainly just write read and write actions that utilize Yii's active record).
I know that a lot of people hype ExtJS and tell how cool it is. Yes, it's the best JavaScript based component and layout system. The main difference between ExtJS and things like jQuery UI is that ExtJS is also for layouts and structures, data processing, etc. while jQuery UI is just there to provide simple widgets for your website.
While ExtJS is the best of its kind, it does not mean that it is perfect. It's not perfect at all. Off the top of my head, past 4 months I have encountered these kinds of problems (and stupid decisions) with ExtJS:
Layouts breaking
I have seen so many times ExtJS failing to construct a layout where I use forms layouts inside fieldsets that are inside some card panel. When you combine some layouts and use uncommon features, it seems that the developers haven't tested them well enough.
Form and form field bugs
Empty texts (also known as placeholders) in text fields in Ext display as gray and when you click on the field, it removes the gray text and allows you to type in. While it seems to work well, sometimes I hate the fact that if you set an empty text like:
[text]new Ext.form.TextField({
name: 'name',
fieldLabel: 'Name',
emptyText: 'Name'
});[/text]
if you now type "Name" as for your name, Ext thinks it is the empty text, and not the text you typed in, and does not send it (oh yeah, Name is a real first name). So, it compares the result to empty text, while it should check if it has been modified.
Form submits
When you disable a form field, you can't decide whether Ext sends it or not, it never sends it. Likewise, if you hide a form field, it always sends it. So, to not send hidden fields, also disable them. To send disable fields that are visible, you need to manually take the values of those and modify the sent result set.
To make things better, if you have a field with an empty text such as "Type your email", and then the user does not type anything, and submits the form. Ext will send the email as "Type your email" and there is no way to alter this behavior what I can see from the documentation.
Grids
Grids are missing features like hiding a specific row. You need to attach a beforeload event to the grid store and manually remove the rows you want, and save the original data into some temporary variables, so, that if you still want to save it you attach another event into beforesave and add the record from the temporary variable to the set.
Comboboxes
You can't do a lot of things like getting the index of the selected combobox item. However, after reading the Ext core for an hour I found an internal variable selectionIndex that worked well.
Support
Worst support ever. We have paid premium forum membership that costs about $750 annually. When we ask for help at the forums, we get from 0 to 1 reply that mostly says it's not implemented/possible/supported or tells us to do something crazy and hackish.
Modals
I love that when you popup a modal window, you can still tab from the window to any items below the window... this could break the entire software if you rely on modals stopping the user from doing something meanwhile the modal window is open.
Windows
I don't like windows a lot, they are not customizable and the worst thing is that our customers constantly have those windows out of screen and can't close them. We added close buttons to the bottom and later extended the Ext's core object which was not fun.
Hiding form fields
This one is my favority, if you have a form field like this:
[text]var a = new Ext.form.TextField({
fieldLabel: 'test',
name: 'email',
emptyText: 'enter email'
});[/text]
and then you do a.hide(), it will only hide the text box, not the field label. The solution is to traverse through the DOM tree to get the field label div and set display none to it.
Store and dates
Stores in Ext allow you to specify the date format that allows Ext to understand the date that the server sends. However, there is
no way to specify how Ext saves dates in AJAX requests. I ended up overriding extjs core function beforesave and made it use regular expressions to convert the data to right format.
Composite fields
Ext has these composite fields that allows you to construct more elements next to each other like "fieldLabel textfield datepicker", but every other time I use it, Ext puts scrollbars below the fields (and am able to scroll 1px to right)...
Flash component
This one does not work in IE 6, 7, 8, because it uses <embed> wrong.
Editable grids
The editable grids in Ext like this one (
http://www.sencha.com/deploy/dev/exampl ... -grid.html), are simply horrible. The checkbox you see there is not a checkbox, it's a div with a background image that toggles between two images when you click on it. While it works OK, we needed to show a combobox... that is not as easy to implement that way.
There are plenty of other problems too, but I don't remember them anymore. So, if you plan on using Ext, PCSpectra or anyone else, make sure you have patience... especially if you are going to do anything even a bit custom and do not expect any support so that you won't be disappointed.