perl - How do I override compare_fields when using Rose::HTML::Form -


so i'm trying use rose::html::form , want fields appear based on 'rank' rather name (the default) .

i've written comparator subroutine:

sub _order_by_rank {   ($self, $one, $two) = @_;   return $one->rank <=> $two->rank; }; 

and referenced in form constructor:

rose::html::form->new(method => 'post', compare_fields => \&_order_by_rank); 

but left with:

can't call method "name" on unblessed reference @ /usr/lib/perl5/site_perl/5.8.8/rose/html/form/field/collection.pm line 405. 

it seems call comparator before i've added anything.

after constructing form object, add fields , call init_fields:

$form->add_fields(     id => { type => 'hidden', value => "", rank => 0 },     number => { type => 'int', size => 4, required => 1, label => 'plant number', rank => 1 },     name => { type => 'text', size => 25, required => 1, label => 'plant name', rank => 2 },     ...   ); $form->init_fields; 

according documentation people do. doesn't explain how it.

hopefully can explain me before have buy new keyboard :)

from documentation looks though, rather passing in subroutine reference, need subclass rose::html::form , override compare_fields method.

the default comparison method rose::html::form::compare_fields. have create subclasses if want different sorting methods different forms.

it me explain further if showed full code.


Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -