Thanks Josh, you led me to the answer. As you said, e.stop() stops bubble-up, 
so all I had to do was move the Confirm to an element within the EvenLink. I 
replaced this...

        <a t:type="eventLink" t:event="delete" 
t:context="list:person.id,person.version" t:zone="editorZone" href="#" 
                t:mixins="Confirm" t:message="Delete ${person.firstName} 
${person.lastName}?">Delete...</a>

with this...

        <a t:type="eventLink" t:event="delete" 
t:context="list:person.id,person.version" t:zone="editorZone" href="#">
                <span t:type="any" t:mixins="Confirm" t:message="Delete 
${person.firstName} ${person.lastName}?">
                        Delete...
                </span>
        </a>

and it works like a charm!

Cheers,

Geoff


On 15/05/2010, at 1:18 AM, Josh Canfield wrote:

> Whoops, I was looking at an old version of tapestry.js, back when they
> onclick function was replaced and there wasn't the observe.
> 
> You can look at the code for stopObserving in prototype.js... but, you
> really can't know what order the events are going to get fired in so
> you can't just remove it from your event. You might be able to wrap
> something around all the events for your link... but it's getting
> complicated.
> 
> On Fri, May 14, 2010 at 7:31 AM, Geoff Callender
> <geoff.callender.jumpst...@gmail.com> wrote:
>> I see what you mean. The "Tapestry.waitForPage(event)" is not a problem. The 
>> real problem is that Tapestry.init (which is added to the bottom of the page 
>> after "new Confirm(...)") sets up the linkZone, part of which is adding 
>> "element.observe("click", function(event) { some XHR stuff happens here })". 
>> That's all in tapestry.js.
>> 
>> So ideally Confirm.doConfirm would remove or add Tapestry's linkZone click 
>> observer depending on whether you confirm or cancel the dialog box.
>> 
>> BUT, how do I get a list of event observers in this version of prototype 
>> (1.6.0)?
>> 
>> Geoff
>> 
>> On 14/05/2010, at 4:59 PM, Josh Canfield wrote:
>> 
>>> event.stop() prevents bubbling up to parent elements, but I don't
>>> believe you can prevent other event handlers from firing (you can test
>>> to see if the event.stopped property is set but it's up to the other
>>> events to implement the check).
>>> 
>>> That said, the linkZone method sets the onclick function on the object
>>> directly instead of using Event.observe. I haven't looked at it hard
>>> enough to pass judgement but this gives you the opportunity to chain
>>> the onclick handler by saving a copy in your object and replacing it
>>> with your own function. Since you can't enforce ordering for observed
>>> events, or prevent them from running maybe this is why onclick is set
>>> directly.
>>> 
>>> Josh
>>> 
>>> 
>>> On Thu, May 13, 2010 at 5:22 PM, Geoff Callender
>>> <geoff.callender.jumpst...@gmail.com> wrote:
>>>> I have a Confirm mixin that works fine until I put it in a zone. It still 
>>>> pops up a confirmation dialog but when Cancel is pressed the mixin fails 
>>>> to stop the event.
>>>> 
>>>> My mixin adds javascript that observes the element, but the zone seems to 
>>>> upset it by adding javascript directly to the element, eg:
>>>> 
>>>>        <a id="eventlink" onclick="javascript:Tapestry.waitForPage(event);" 
>>>> shape="rect" href="./simplewithzone:delete">Delete...</a>
>>>> 
>>>> What do I need to change in Confirm to make it stop the event when there's 
>>>> a zone?
>>>> 
>>>> Here's source for confirm.js and Confirm.java:
>>>> 
>>>>        var Confirm = Class.create();
>>>>        Confirm.prototype = {
>>>> 
>>>>                initialize: function(elementId, message) {
>>>>                        this.message = message;
>>>>                        Event.observe($(elementId), 'click', 
>>>> this.doConfirm.bindAsEventListener(this));
>>>>                },
>>>> 
>>>>                doConfirm: function(e) {
>>>>                        if (! confirm(this.message)) {
>>>>                                e.stop();
>>>>                        }
>>>>                }
>>>> 
>>>>        }
>>>> 
>>>>        package jumpstart.web.mixins;
>>>> 
>>>>        import org.apache.tapestry5.BindingConstants;
>>>>        import org.apache.tapestry5.ClientElement;
>>>>        import org.apache.tapestry5.RenderSupport;
>>>>        import org.apache.tapestry5.annotations.AfterRender;
>>>>        import org.apache.tapestry5.annotations.IncludeJavaScriptLibrary;
>>>>        import org.apache.tapestry5.annotations.InjectContainer;
>>>>        import org.apache.tapestry5.annotations.Parameter;
>>>>        import org.apache.tapestry5.ioc.annotations.Inject;
>>>> 
>>>>        @IncludeJavaScriptLibrary("confirm.js")
>>>>        public class Confirm {
>>>> 
>>>>                @Parameter(value = "Are you sure?", defaultPrefix = 
>>>> BindingConstants.LITERAL)
>>>>                private String message;
>>>> 
>>>>                @Inject
>>>>                private RenderSupport renderSupport;
>>>> 
>>>>                @InjectContainer
>>>>                private ClientElement element;
>>>> 
>>>>                @AfterRender
>>>>                public void afterRender() {
>>>>                        renderSupport.addScript(String.format("new 
>>>> Confirm('%s', '%s');", element.getClientId(), message));
>>>>                }
>>>> 
>>>>        }
>>>> 
>>>> Thanks in advance,
>>>> 
>>>> Geoff
>>> 
>>> 
>>> 
>>> --
>>> --
>>> http://www.bodylabgym.com - a private, by appointment only, one-on-one
>>> health and fitness facility.
>>> --
>>> http://www.ectransition.com - Quality Electronic Cigarettes at a
>>> reasonable price!
>>> --
>>> TheDailyTube.com. Sign up and get the best new videos on the internet
>>> delivered fresh to your inbox.
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>> 
>> 
>> 
> 
> 
> 
> -- 
> --
> http://www.bodylabgym.com - a private, by appointment only, one-on-one
> health and fitness facility.
> --
> http://www.ectransition.com - Quality Electronic Cigarettes at a
> reasonable price!
> --
> TheDailyTube.com. Sign up and get the best new videos on the internet
> delivered fresh to your inbox.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
> 

Reply via email to