[ https://issues.apache.org/jira/browse/WICKET-2739?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Igor Vaynberg resolved WICKET-2739. ----------------------------------- Assignee: Igor Vaynberg Fix Version/s: 1.4.11 1.5-M2 Resolution: Fixed > Throttling breaks AjaxFormSubmitBehavior's precondition check > ------------------------------------------------------------- > > Key: WICKET-2739 > URL: https://issues.apache.org/jira/browse/WICKET-2739 > Project: Wicket > Issue Type: Bug > Components: wicket > Affects Versions: 1.4.5 > Environment: wicket 1.4.5, wicket quickstart, windows XP; FireFox > 3.5.7 used in quickstart test > Reporter: Russell Morrisey > Assignee: Igor Vaynberg > Fix For: 1.4.11, 1.5-M2 > > Attachments: throttleBreaksPrecondition.zip > > > AjaxFormSubmitBehavior#getPreconditionScript() looks like: > return "return Wicket.$$(this)&&Wicket.$$('" + getForm().getMarkupId() + "')"; > The javascript keyword 'this' should point to the DOM element which initiated > the ajax event. (It wants to check that the component still exists on the > page, before initiating the ajax request, as well as the form this behavior > is linked to). When using an AjaxThrottlingCallDecorator to throttle the ajax > request, the throttle callback function is not bound to the DOM element. The > result is that 'this' refers to the window element, in the context of the > throttle callback. The precondition function gets bind(this) called on it, > but it's the wrong 'this'. I think that the throttle callback should be bound > to 'this' at the time the callback is defined. > AbstractDefaultAjaxBehavior#throttleScript(...) should be changed from: > return new AppendingStringBuffer("wicketThrottler.throttle( > '").append(throttleId) > .append("', ") > .append(throttleDelay.getMilliseconds()) > .append(", function() { ") > .append(script) > .append("});"); > to: > return new AppendingStringBuffer("wicketThrottler.throttle( > '").append(throttleId) > .append("', ") > .append(throttleDelay.getMilliseconds()) > .append(", function() { ") > .append(script) > .append("}.bind(this));"); -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.