... anybody?
On Tue, Nov 17, 2009 at 10:03 PM, Ilya Obshadko <[email protected]>wrote:
> I have a task that looks quite simple, but still have a problem
> accomplishing it.
>
> Suppose you have a form with Select control, and onChange event on that
> control should generate form submission event.
>
> I've created a simple mixin for that.
>
> public class SubmitOnChange {
>
> @Environmental
>
> private RenderSupport renderSupport;
>
>
>
> @Environmental
>
> private FormSupport formSupport;
>
>
>
> @InjectContainer
>
> private AbstractField container;
>
>
>
> @Inject
>
> private ComponentResources resources;
>
>
>
> @Parameter(required=true,allowNull=false,defaultPrefix="literal")
>
> private String submitEvent;
>
>
>
> @Parameter(required=false,allowNull=true,defaultPrefix="prop")
>
> private Object[] submitContext;
>
>
>
> public void afterRender () {
>
> final String formId = formSupport.getClientId ();
>
> final Link link = resources.createEventLink ( submitEvent,
> submitContext );
>
> renderSupport.addInit ( "submitOnChange",
>
> new JSONArray ( formId, container.getClientId (),
> link.toAbsoluteURI () ) );
>
> }
>
>
> }
>
> And accompanying JS:
>
> Tapestry.Initializer.submitOnChange = function(formId, elementId,
> eventUrl) {
>
> $(elementId).observe ("change", function(event) {
>
> $(formId).action = eventUrl;
>
> if ( $(elementId).value ) $(formId).submit ();
>
> });
>
> };
>
>
> Now, there is a problem. onChange event really submits the form, but the
> event is fired on Select component instead of Form component and form values
> are obviously lost during submission. If we comment out 3rd line in JS part,
> it works correctly (because default form action is not altered), but this
> way I lose an ability to control submission events names and I can intercept
> events only by component names.
>
> My goal is to simulate 'real' submit behavior. I believe it must be simple,
> but I'm stuck. Any ideas?
>
> --
> Ilya Obshadko
>
>
>
--
Ilya Obshadko