Everything tagged error (2 posts)

ExtJS Radio Buttons and Square Brackets

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:

{
xtype: 'radio',
name: 'schedule[include_type]',
inputValue: 'page',
boxLabel: 'Show page:'
}
{
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:

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...
});
}
}
]
})
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.

Continue reading

When Git tells you it failed to push some refs

I received an unhelpful error while trying to push to a repository on Github today:

git push
To git@github.com:user/repo.git
! [rejected] branchname -> branchname (non-fast forward)
error: failed to push some refs to 'git@github.com:user/repo.git'
git push
To git@github.com:user/repo.git
! [rejected] branchname -> branchname (non-fast forward)
error: failed to push some refs to 'git@github.com:user/repo.git'

In case you ever have the same problem, all you have to do is a quick git pull first, then you can carry on as normal. Easy when you know how...

Continue reading