[ 
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.

Reply via email to