[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