[Html-widget] PATCH: embed problems
Michael Gray
mjg17 at eng.cam.ac.uk
Wed Aug 23 10:39:32 CEST 2006
On Wed, 23 Aug 2006, Andreas Marienborg wrote:
> I all of a sudden had massive problems with embeded widgets, so I tried my
> best to fix it. The problem for me was that DBIC::HTMLWidget broke its
> fill_widget.
>
> The symptom was that the elements I got back from get_elements on the master
> widget was problematic, and also that there was no record of embeded widgets.
Are you using the CPAN version 0.08 or the SVN version?
I may have a DBIC::HTMLWidget patch which I've applied locally but isn't
on CPAN yet. Oh yes, looks like this is required to make it work with
my embedding changes which are now on SVN. Attached...
--
Michael
-------------- next part --------------
--- lib/DBIx/Class/HTMLWidget.pm.orig 2006-06-15 16:04:35.000000000 +0100
+++ lib/DBIx/Class/HTMLWidget.pm 2006-08-09 16:36:40.717667700 +0100
@@ -11,24 +11,34 @@
croak('fill_widget needs a HTML::Widget object as argument')
unless ref $widget && $widget->isa('HTML::Widget');
- my @elements = $widget->get_elements;
- # get embeded widgets
- my @widgets = @{ $widget->{_embedded} || [] };
-
- foreach my $emb_widget (@widgets) {
- push @elements, $emb_widget->get_elements;
+ my @elements;
+ if ($widget->can('find_elements')) {
+ # New style
+ @elements = $widget->find_elements;
+ } else {
+ @elements = $widget->get_elements;
+
+ # get embeded widgets
+ my @widgets = @{ $widget->{_embedded} || [] };
+
+ foreach my $emb_widget (@widgets) {
+ push @elements, $emb_widget->get_elements;
+ }
}
foreach my $element ( @elements ) {
my $name=$element->name;
next unless $name && $dbic->can($name) && $element->can('value');
if($element->isa('HTML::Widget::Element::Checkbox')) {
- $element->checked($dbic->$name?1:0);
- } else {
- $element->value($dbic->$name)
- unless $element->isa('HTML::Widget::Element::Password');
- }
+ $element->checked($dbic->$name?1:0);
+ } elsif($element->isa('HTML::Widget::Element::Radio')) {
+ next unless defined $dbic->$name;
+ $element->checked($dbic->$name eq $element->value() ? 1 : 0);
+ } else {
+ $element->value($dbic->$name)
+ unless $element->isa('HTML::Widget::Element::Password');
+ }
}
}
More information about the Html-widget
mailing list