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 _______________________________________________ HTML-FormFu mailing list HTML-FormFu@lists.scsys.co.uk http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu