[html-formfu] set multiple values to hidden element?

Carl Franks fireartist at gmail.com
Tue Jun 22 09:19:23 GMT 2010


Hi,

There's already a HTML::FormFu::Filter::Spit that can deserialize a
submitted value.
e.g, this will turn "a,b,c" into a perl array [ 'a', 'b', 'c' ].
    filter:
        - type: Split
          regex: ','

It would be simple to write a custom Deflator that could do the
serialization for you...

package MyApp::FormFu::Deflator::JoinIDs
use base 'HTML::FormFu::Deflator';
use HTML::FormFu::Constants qw( $EMPTY_STR );
use Try::Tiny;

sub deflator {
    my ( $self, $value ) = @_;

    return if !defined $value || $value eq $EMPTY_STR;

    my $flat_value;

    try {
        $flat_value = join ',', @$value;
    } catch {
        return $value;
    };

    return $flat_value;
}
1;

If you add that deflator to the Hidden field, it would let you do:
    $field->default( \@department_ids );

Carl


On 22 June 2010 09:45, Hu Hailin <i at h2l.name> wrote:
> Hi,
>
> Let me try to make an example:
>
> a employee search page and can be searched by department.
> Suppose there are hundreds of departments, showing a very long
> multiple selectable select element seems not a good idea.
> I try to make the page only take departments' id from query and
> display the departments' info in the page.
>
> Even if use a block element, hundreds of departments info have to be
> listed in page, right?
>
> Well, it seems I have to serialize data...
>
> Thank you, guys.
>
> On Tue, Jun 22, 2010 at 5:08 PM, Carl Franks <fireartist at gmail.com> wrote:
>> Hi,
>>
>> A hidden field won't support multiple values, so you'd need to
>> serialize them yourself - for example with JSON.
>>    $field->default( encode_json( $value ) );
>>
>> I'd recommend though, just using Block elements, as it's very easy to
>> attach IDs or class-names, which your JavaScript can target to
>> show/hide the blocks.
>>
>> Carl
>>
>>
>> On 22 June 2010 08:19, Hu Hailin <i at h2l.name> wrote:
>>> Hi
>>>
>>> My situation is that I have so large a form that I try to split some
>>> condition out to display them in a collapsible div with javascript.
>>> So I am trying to pass data using Element::Hidden, but it accepts
>>> first value and fills it in form in multiple values' case.
>>> I also glanced at Element::Repeatable which seems not the one I want...
>>>
>>> Yes, it might be implemented using blocks but a little too complex.
>>> Any advice for implementing a repeatable hidden element?
>>>
>>> Thanks.
>>> --
>>> islue
>>>
>>> _______________________________________________
>>> HTML-FormFu mailing list
>>> HTML-FormFu at lists.scsys.co.uk
>>> http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu
>>>
>>
>> _______________________________________________
>> HTML-FormFu mailing list
>> HTML-FormFu at lists.scsys.co.uk
>> http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu
>>
>
>
>
> --
> islue
>
> _______________________________________________
> HTML-FormFu mailing list
> HTML-FormFu at lists.scsys.co.uk
> http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu
>



More information about the HTML-FormFu mailing list