[html-formfu] Increment id on block elements

Carl Franks fireartist at gmail.com
Mon Dec 7 19:24:18 GMT 2009


2009/12/7 Stephen Shorrock <stephen.shorrock at googlemail.com>:
>
> I created a new Block element class with the prepare_id method.  I
> thought it would be tidier to access my data via a filter rather than
> an action but unfortunately I seem unable to access it in either
> plugins or filters:
>
> in my plugin/filter
>
> $var = "rt_1";
> $self->parent()->form->get_all_element($var)->content('value was: '.$value);
>
> fails with 'Can't call method "content" on an undefined value ' .
> Viewing the source the elements exist.  Am I trying to access the
> values before prepare_id has been run?  hence is this not possible?

If this is from the same form config as earlier, none of the Blocks
have a *name* "rt_1".

If you gave the Block within the Repeatable a name, though it wouldn't
be incremented by auto_block_id(), you could still grab it using
something like:
    $form->get_all_elements('rt')->[0]
using an index to get the right element from the returned arrayref.

prepare_id() is called during render_data(), which is called by render().
It doesn't affect the data structure of $form - it builds a
non-blessed data structure, returned by render_data().
I suppose you could do something like:

    use List::Util qw( first );
    my $repeatable = $form->get_all_element({ type => repeatable });
    my $repeatable_children = $repeatable->render_data->{elements};
    my $elem = first { $_->{name} eq 'rt_1' } @$repeatable_children;

Cheers,
Carl



More information about the HTML-FormFu mailing list