You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Geoff Callender <ab...@mac.com> on 2007/05/04 17:52:56 UTC

4.1 and "do it once" components

I've got this working in 4.0 but need some help getting it working  
with 4.1.  It involves Tapestry's javascript.

I have some "do it once" components, eg. SubmitOnce and  
DirectLinkOnce; which address the problem of multiple clicks (causing  
duplicate submissions).  I've adapted them from the tapestry-bayeaux  
project and upgraded them to Tap 4.0.

In javascript they check if a variable called "ongoingSubmit" is  
true.  If not, they set it to true and do what Submit or DirectLink  
would normally do.  Otherwise they do nothing, ie. they ignore  
multiple clicks.  That much works just fine in both 4.0 and 4.1.

The tricky bit is when client validation detects an error and  
therefore ongoingSubmit should be set to false.  In 4.0 I handle this  
by overriding Tapestry javascript in my own script:

     Tapestry.default_invalid_field_handler = function(event, field,  
message)
	{
	  if (!event.abort && !field.disabled)
	  {
	    Tapestry.set_focus(field);
	    window.alert(message);
	
	    event.abort = true;
	    event.cancel_handlers = true;
	
	    ongoingSubmit = false;
	  }
	}

The only difference is one added line

	    ongoingSubmit = false;

Q: In Tap 4.1, what should I do?  And is there a more elegant way  
than copying and pasting the entire function as I've done?

Geoff



Re: 4.1 and "do it once" components

Posted by Geoff Callender <ge...@mac.com>.
Very nice.  I'll try it.

Thanks,
Geoff

On 16/05/2007, at 10:55 PM, Marcus.Schulte@bmw.ch wrote:

> I just did somthing similar for my "DirtyFormWarning" component.
> You might try something like:
> ___________________________
> submitOnce = {
>
>       submitting:false;
>
> 	interceptValidation:function(inv) {
>       	var valid = inv.proceed();
> 		if (!valid) this.submitting=false;
> 		return valid;		
> 	}
> }
>
> dojo.event.connect("around", tapestry.form.validation, "validateForm",
> submitOnce, "interceptValidation");
> ______________________________
>
>
> hth,
> Marcus
>
>
>> -----Original Message-----
>> From: Geoff Callender [mailto:geoff.callender@mac.com]
>> Sent: Tuesday, May 15, 2007 4:09 PM
>> To: Tapestry users
>> Subject: Re: 4.1 and "do it once" components
>>
>> Thanks, Jesse, but I couldn't get it to work, possibly
>> because it's kind of self-referencing?
>>
>> On 05/05/2007, at 2:01 AM, Jesse Kuhnert wrote:
>>
>>> Sure ...I think you can generally do something like:
>>>
>>> -) Use
>>> http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-
>>> framework/src/js/tapestry/form/validation.js?view=markupas
>>> a reference.
>>>
>>> -) Override tapestry.form.validation.validateForm(form, props) with
>>> something else ....Like maybe
>>>
>>> tapestry.form.validation.validateForm=function(form,props) {
>>>        var passed = tapestry.form.validation.prototype.apply(this,
>>> arguments);
>>>
>>>        // prevent submission
>>>        return false;
>>> }
>>>
>>> Something like that anyways.
>>>
>>> On 5/4/07, Geoff Callender <ab...@mac.com> wrote:
>>>>
>>>> I've got this working in 4.0 but need some help getting it working
>>>> with 4.1.  It involves Tapestry's javascript.
>>>>
>>>> I have some "do it once" components, eg. SubmitOnce and
>>>> DirectLinkOnce; which address the problem of multiple
>> clicks (causing
>>>> duplicate submissions).  I've adapted them from the
>> tapestry-bayeaux
>>>> project and upgraded them to Tap 4.0.
>>>>
>>>> In javascript they check if a variable called "ongoingSubmit" is
>>>> true.  If not, they set it to true and do what Submit or
>> DirectLink
>>>> would normally do.  Otherwise they do nothing, ie. they ignore
>>>> multiple clicks.  That much works just fine in both 4.0 and 4.1.
>>>>
>>>> The tricky bit is when client validation detects an error and
>>>> therefore ongoingSubmit should be set to false.  In 4.0 I
>> handle this
>>>> by overriding Tapestry javascript in my own script:
>>>>
>>>>      Tapestry.default_invalid_field_handler =
>> function(event, field,
>>>> message)
>>>>         {
>>>>           if (!event.abort && !field.disabled)
>>>>           {
>>>>             Tapestry.set_focus(field);
>>>>             window.alert(message);
>>>>
>>>>             event.abort = true;
>>>>             event.cancel_handlers = true;
>>>>
>>>>             ongoingSubmit = false;
>>>>           }
>>>>         }
>>>>
>>>> The only difference is one added line
>>>>
>>>>             ongoingSubmit = false;
>>>>
>>>> Q: In Tap 4.1, what should I do?  And is there a more elegant way
>>>> than copying and pasting the entire function as I've done?
>>>>
>>>> Geoff
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Jesse Kuhnert
>>> Tapestry/Dojo team member/developer
>>>
>>> Open source based consulting work centered around
>>> dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


RE: 4.1 and "do it once" components

Posted by Ma...@bmw.ch.
I just did somthing similar for my "DirtyFormWarning" component.
You might try something like:
___________________________
submitOnce = { 

      submitting:false;

	interceptValidation:function(inv) {
      	var valid = inv.proceed();
		if (!valid) this.submitting=false;
		return valid;		
	}
}

dojo.event.connect("around", tapestry.form.validation, "validateForm",
submitOnce, "interceptValidation");
______________________________


hth,
Marcus
 

> -----Original Message-----
> From: Geoff Callender [mailto:geoff.callender@mac.com] 
> Sent: Tuesday, May 15, 2007 4:09 PM
> To: Tapestry users
> Subject: Re: 4.1 and "do it once" components
> 
> Thanks, Jesse, but I couldn't get it to work, possibly 
> because it's kind of self-referencing?
> 
> On 05/05/2007, at 2:01 AM, Jesse Kuhnert wrote:
> 
> > Sure ...I think you can generally do something like:
> >
> > -) Use
> > http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-
> > framework/src/js/tapestry/form/validation.js?view=markupas
> > a reference.
> >
> > -) Override tapestry.form.validation.validateForm(form, props) with 
> > something else ....Like maybe
> >
> > tapestry.form.validation.validateForm=function(form,props) {
> >        var passed = tapestry.form.validation.prototype.apply(this,
> > arguments);
> >
> >        // prevent submission
> >        return false;
> > }
> >
> > Something like that anyways.
> >
> > On 5/4/07, Geoff Callender <ab...@mac.com> wrote:
> >>
> >> I've got this working in 4.0 but need some help getting it working 
> >> with 4.1.  It involves Tapestry's javascript.
> >>
> >> I have some "do it once" components, eg. SubmitOnce and 
> >> DirectLinkOnce; which address the problem of multiple 
> clicks (causing 
> >> duplicate submissions).  I've adapted them from the 
> tapestry-bayeaux 
> >> project and upgraded them to Tap 4.0.
> >>
> >> In javascript they check if a variable called "ongoingSubmit" is 
> >> true.  If not, they set it to true and do what Submit or 
> DirectLink 
> >> would normally do.  Otherwise they do nothing, ie. they ignore 
> >> multiple clicks.  That much works just fine in both 4.0 and 4.1.
> >>
> >> The tricky bit is when client validation detects an error and 
> >> therefore ongoingSubmit should be set to false.  In 4.0 I 
> handle this 
> >> by overriding Tapestry javascript in my own script:
> >>
> >>      Tapestry.default_invalid_field_handler = 
> function(event, field,
> >> message)
> >>         {
> >>           if (!event.abort && !field.disabled)
> >>           {
> >>             Tapestry.set_focus(field);
> >>             window.alert(message);
> >>
> >>             event.abort = true;
> >>             event.cancel_handlers = true;
> >>
> >>             ongoingSubmit = false;
> >>           }
> >>         }
> >>
> >> The only difference is one added line
> >>
> >>             ongoingSubmit = false;
> >>
> >> Q: In Tap 4.1, what should I do?  And is there a more elegant way 
> >> than copying and pasting the entire function as I've done?
> >>
> >> Geoff
> >>
> >>
> >>
> >
> >
> > --
> > Jesse Kuhnert
> > Tapestry/Dojo team member/developer
> >
> > Open source based consulting work centered around 
> > dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: 4.1 and "do it once" components

Posted by Geoff Callender <ge...@mac.com>.
Thanks, Jesse, but I couldn't get it to work, possibly because it's  
kind of self-referencing?

On 05/05/2007, at 2:01 AM, Jesse Kuhnert wrote:

> Sure ...I think you can generally do something like:
>
> -) Use
> http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry- 
> framework/src/js/tapestry/form/validation.js?view=markupas
> a reference.
>
> -) Override tapestry.form.validation.validateForm(form, props) with
> something else ....Like maybe
>
> tapestry.form.validation.validateForm=function(form,props) {
>        var passed = tapestry.form.validation.prototype.apply(this,
> arguments);
>
>        // prevent submission
>        return false;
> }
>
> Something like that anyways.
>
> On 5/4/07, Geoff Callender <ab...@mac.com> wrote:
>>
>> I've got this working in 4.0 but need some help getting it working
>> with 4.1.  It involves Tapestry's javascript.
>>
>> I have some "do it once" components, eg. SubmitOnce and
>> DirectLinkOnce; which address the problem of multiple clicks (causing
>> duplicate submissions).  I've adapted them from the tapestry-bayeaux
>> project and upgraded them to Tap 4.0.
>>
>> In javascript they check if a variable called "ongoingSubmit" is
>> true.  If not, they set it to true and do what Submit or DirectLink
>> would normally do.  Otherwise they do nothing, ie. they ignore
>> multiple clicks.  That much works just fine in both 4.0 and 4.1.
>>
>> The tricky bit is when client validation detects an error and
>> therefore ongoingSubmit should be set to false.  In 4.0 I handle this
>> by overriding Tapestry javascript in my own script:
>>
>>      Tapestry.default_invalid_field_handler = function(event, field,
>> message)
>>         {
>>           if (!event.abort && !field.disabled)
>>           {
>>             Tapestry.set_focus(field);
>>             window.alert(message);
>>
>>             event.abort = true;
>>             event.cancel_handlers = true;
>>
>>             ongoingSubmit = false;
>>           }
>>         }
>>
>> The only difference is one added line
>>
>>             ongoingSubmit = false;
>>
>> Q: In Tap 4.1, what should I do?  And is there a more elegant way
>> than copying and pasting the entire function as I've done?
>>
>> Geoff
>>
>>
>>
>
>
> -- 
> Jesse Kuhnert
> Tapestry/Dojo team member/developer
>
> Open source based consulting work centered around
> dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: 4.1 and "do it once" components

Posted by Jesse Kuhnert <jk...@gmail.com>.
Sure ...I think you can generally do something like:

-) Use
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form/validation.js?view=markupas
a reference.

-) Override tapestry.form.validation.validateForm(form, props) with
something else ....Like maybe

tapestry.form.validation.validateForm=function(form,props) {
        var passed = tapestry.form.validation.prototype.apply(this,
arguments);

        // prevent submission
        return false;
}

Something like that anyways.

On 5/4/07, Geoff Callender <ab...@mac.com> wrote:
>
> I've got this working in 4.0 but need some help getting it working
> with 4.1.  It involves Tapestry's javascript.
>
> I have some "do it once" components, eg. SubmitOnce and
> DirectLinkOnce; which address the problem of multiple clicks (causing
> duplicate submissions).  I've adapted them from the tapestry-bayeaux
> project and upgraded them to Tap 4.0.
>
> In javascript they check if a variable called "ongoingSubmit" is
> true.  If not, they set it to true and do what Submit or DirectLink
> would normally do.  Otherwise they do nothing, ie. they ignore
> multiple clicks.  That much works just fine in both 4.0 and 4.1.
>
> The tricky bit is when client validation detects an error and
> therefore ongoingSubmit should be set to false.  In 4.0 I handle this
> by overriding Tapestry javascript in my own script:
>
>      Tapestry.default_invalid_field_handler = function(event, field,
> message)
>         {
>           if (!event.abort && !field.disabled)
>           {
>             Tapestry.set_focus(field);
>             window.alert(message);
>
>             event.abort = true;
>             event.cancel_handlers = true;
>
>             ongoingSubmit = false;
>           }
>         }
>
> The only difference is one added line
>
>             ongoingSubmit = false;
>
> Q: In Tap 4.1, what should I do?  And is there a more elegant way
> than copying and pasting the entire function as I've done?
>
> Geoff
>
>
>


-- 
Jesse Kuhnert
Tapestry/Dojo team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com