This was fixed recently:
https://issues.apache.org/jira/browse/TAPESTRY-2261
On Fri, Apr 4, 2008 at 2:55 AM, Adriaan Joubert <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I had an issue with triggering a form fragment with a radio button. I
> came up with the following solution, and thought I'd share and ask for
> comments - perhaps it is possible to come up with something that can
> be included in Tapestry.
>
> The .tml looks as follows:
>
> <t:form t:id="create">
> <t:radiogroup t:id="createAction" value="action"
> encoder="actionEncoder">
> <t:radio t:id="copy" t:mixins="radiotriggerfragment"
> fragment="copyfragment" />
> <t:label for="copy" />
> <t:radio t:id="new" />
> <t:label for="new" />
> </t:radiogroup>
>
> <t:formfragment t:id="copyfragment" visible="true">
> This is the copy form fragment
> </t:formfragment>
> </t:form>
>
> This required the following mixin (mostly a copy of TriggerFragment.java):
>
> /**
> * Deal with using a radio button to make a form fragment visible/invisible
> */
> public class RadioTriggerFragment {
>
> /** The container for this mixin */
> @InjectContainer
> private Field container_;
>
> /**
> * The [EMAIL PROTECTED]
> org.apache.tapestry.corelib.components.FormFragment} instance
> * to make dynamically visible or hidden.
> */
> @Parameter(name = "fragment", required = true, defaultPrefix =
> "component")
> private ClientElement fragment_;
>
> /** Page render support to get unique client side ids and generate
> links */
> @Environmental
> private PageRenderSupport renderSupport_;
>
> /** The heartbeat */
> @Environmental
> private Heartbeat heartbeat_;
>
> /**
> * Render the javascript call to deal with the radio button
> check/uncheck
> */
> void beginRender() {
> Runnable r = new Runnable() {
> @SuppressWarnings("synthetic-access")
> public void run() {
> renderSupport_.addScript(
>
> "aplLinkRadioButtonToFormFragment('%s', '%s');",
> container_.getClientId(),
> fragment_.getClientId());
> }
> };
>
> // Defer generating the script to ensure that the
> FormFragment has
> // rendered
> // and generated its client id.
>
> heartbeat_.defer(r);
> }
> }
>
> and the following bit of javascript:
>
> function aplLinkRadioButtonToFormFragment(radio, form) {
> radio = $(radio);
> // Get the name on this radio button
> var allRadios = radio.form[radio.name];
> for (var i=0; i<allRadios.length; i++)
> allRadios[i].observe("click", function() {
> $(form).formFragment.setVisible(radio.checked);
> });
> }
>
> There does not seem to be a different way but to listen for events on
> all radio buttons in a radio group.
>
> Cheers,
>
> Adriaan
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
--
Howard M. Lewis Ship
Creator Apache Tapestry and Apache HiveMind
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]