I've done something similar without much hacking. In my case I have an autocomplete field in each row, and when a selection is made I needed to add a new row automatically so the user can enter the next item. I found that the row injector always has the same name, so I just call the trigger function defined in tapestry.js when I want to add the new row. The addRow parameter is empty so the link doesn't render, but the trigger still does.
<div t:type="ajaxFormLoop" t:source="items" t:value="item"> <t:submitNotifier> <input type="text" t:type="textField" t:value="item.name" t:mixins="autocomplete2" t:afterUpdateElement="itemSelected"/> </t:submitNotifier> ... <t:parameter name="addRow"></t:parameter> </div> function itemSelected() { $("rowInjector").trigger(); } You may notice that I'm using my own autocomplete mixin, which I had to make to expose the afterUpdateElement event, but if you've got some other logic that invokes the adding of a row the idea should be the same. Hope this helps, Brian ________________________________________ From: Juan Isern [juanis...@gmail.com] Sent: Thursday, April 08, 2010 6:43 PM To: users@tapestry.apache.org Subject: Re: Tweaking an AjaxFormLoop Robert, I've got to say that you gave me the answer that I feared most. Hehe, REALLY thanks for your tips, I knew already that sooner or later I had to hack into tapestry.js Cheers! Robert Zeigler wrote: > > > On Apr 8, 2010, at 4/81:48 PM , Juan Isern wrote: > >> What I would like to do is to trigger an "addRow" event by executing >> some >> javascript (that will be invoked when an upload finishes). I thought >> of >> simulating a click event on an invisible "add row" link but I'm sure >> there's >> a prettier solution out there. >> > > There are other ways to do it, although I'm not sure I would call them > "prettier". :) > AjaxFormLoop places an "AjaxFormLoopContext" object into the > environment when it renders. > You can access this object and add a call to "addAddRowTrigger". That > part is pretty. The main issue (for you) is that tapestry then assumes > that the trigger is going to be invoked on the "click" action, which > isn't what you want in this case. > There's a way around it, and that's where things get uglier. You can > monkey patch tapestry.js to override > Tapestry.Initializer.ajaxFormLoop, and make it behave how you want. > This is typically how I've implemented custom "add row" functionality. > > It might be a nifty change to enable a second form of the > "addAddRowTrigger" that takes, say, a js callback name as a 2nd > argument. Or perhaps some flag triggering whether the first argument > is an id or a callback. In any event, the initializer could then > check for the appropriate condition, and if the condition is met, the > initializer would delegate the setup to the callback, passing in the > row injector, rather than assuming a click. If there's enough > interest in something like this, I would be willing to do the work to > add it to the framework (the exact api would need to be worked out, > though). > > >> The same question could apply to any client-side ajax behavior, like >> refreshing zones. Is there any way to do it programmatically via >> javascript? >> > > The best answer here is to take a look for yourself through (mainly) > the tapestry.js file. > But, yes, you can refresh zones in non-default ways; the trick (as > with AjaxFormLoop above) is getting a handle to the runtime js objects. > >> Another thing: the javascript effect displayed when a row is added/ >> removed >> behaves in a somewhat weird fashion. Can be this effect be disabled or >> configured? >> > > http://tapestry.apache.org/tapestry5.1/tapestry-core/ref/org/apache/tapestry5/corelib/components/AjaxFormLoop.html > Check out the "show" parameter. > >> Thanks a lot! >> -- >> View this message in context: >> http://old.nabble.com/Tweaking-an-AjaxFormLoop-tp28182870p28182870.html >> Sent from the Tapestry - User mailing list archive at Nabble.com. >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >> For additional commands, e-mail: users-h...@tapestry.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > > > -- View this message in context: http://old.nabble.com/Tweaking-an-AjaxFormLoop-tp28182870p28186610.html Sent from the Tapestry - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org