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
Post a Comment