On Mon, Dec 7, 2009 at 7:24 PM, Carl Franks <fireart...@gmail.com> wrote: > 2009/12/7 Stephen Shorrock <stephen.shorr...@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 >
That's sorted the problem. I began investigating how the _Inputs become accessible through their incremented names, and thought you tried a similar implementation for the Blocks. I misunderstood you comment earlier about accessing blocks via their names later. Thank you v.much Stephen _______________________________________________ HTML-FormFu mailing list HTML-FormFu@lists.scsys.co.uk http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu