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 >