[Html-widget] formfu - deflators

Carl Franks fireartist at gmail.com
Mon Apr 9 16:51:35 GMT 2007


On 09/04/07, Daisuke Maki <daisuke at endeworks.jp> wrote:
> Can you clarify for me how deflators are supposed to work?
>
> My impression was that deflators are always run against a field during
> render() time, if one is specified in the spec. For example,
>
>
>  elements:
>     -
>        type: text
>        name: foo
>        inflator:
>           - type: +MyCustom::Inflator
>        defaltor:
>           - type: +MyCustom::Deflator
>
> So I want to receive some stuff in "foo" as text, but turn them into a
> Perl object while I'm working with it -- then I want to call the
> object's stringification method to turn it into a string again.
>
> Looking at the code in HTML::FormFu::Element::input::_render_value, I see:
>
>    if ( !$self->form->submitted ) {
>        for my $deflator ( @{ $self->_deflators } ) {
>            $value = $deflator->process($value);
>        }
>    }
>
> which threw me off. So deflators aren't run if the form has been
> submitted? Is this right?

The way they work at the moment, they´re intended to be run on values
you set yourself: $field->default($obj)
such as when you recieve a DateTime object from DBIx::Class.
When you redisplay a form, the original submitted value is used.
Filtered / inflated values aren´t used, so it shouldn´t prove a
problem that the deflators are only used when it´s not been submitted.
Of course, this is only how I think it should work - the code might
differ from my memory! I´m also open to suggestions on how it might
work better, as well.

Carl



More information about the Html-widget mailing list