While creating an ExtJS form with several radio buttons today I ran into a bug which caused none of them to work as expected, even though there were no errors/exceptions. To cut a long story short, it was because I was setting the name to “schedule[include_type]” – like this:
1
2
3
4
5
6
| { xtype: 'radio' , name: 'schedule[include_type]' , inputValue: 'page' , boxLabel: 'Show page:' } |
This radio button is one of 4, which allows the user which type of file they want to include on a particular model (a Schedule in this case) – be it Page, Video, Category or one other. The thing is – none of them work with the square brackets in the name. If you remove the brackets, they all work correctly, but the server-side is relying on those brackets to be present to group the data correctly.
In the end I bit the bullet and updated my submit method to add a new parameter directly – here’s a full example:
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
26
27
28
29
30
31
32
33
34
35
| form = new Ext.form.FormPanel({ items: [ { xtype: 'radio' , name: 'include_type' , inputValue: 'page' , boxLabel: 'Show page:' }, { xtype: 'radio' , name: 'include_type' , inputValue: 'category' , boxLabel: 'Show category:' }, ... plus some extra items ], buttons: [ { text: 'Save' , handler: function () { //find the currently selected include_type from the form var include_type = this .form.getValues()[ 'include_type' ]; //note the params option - this needs to be added manually otherwhise //schedule[include_type] won't appear form.form.submit({ waitMsg: 'Saving Data...', params: "schedule[include_type]=" + include_type, url: some url... }); } } ] }) |
Note: I don’t usually add buttons in the way above so I’m not sure if the form.form.submit will work correctly here – see http://extjs.com/deploy/dev/docs/?class=Ext.form.FormPanel for information about overriding submit.
So what we’re doing here is finding which radio button is currently checked, and appending this under “schedule[include_type]” when POSTing the form variables to the server. This really isn’t pleasant but seems to be the best way around this limitation for now.
I regularly use square brackets in other Ext JS Fields – Radio Buttons seem to be the only ones that have this problem. http://extjs.com/forum/showthread.php?p=185296 has a bit of background behind this, but no real solution.
Comments
Post a Comment