ClientJS: automatisch Date- und Partpicker nach AJAX-Request initialisieren
authorMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 12 Jul 2013 14:06:07 +0000 (16:06 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 12 Jul 2013 14:07:28 +0000 (16:07 +0200)
SL/ClientJS.pm
SL/Presenter.pm
SL/Presenter/Part.pm
SL/Template/Plugin/L.pm
js/client_js.js
js/kivi.js

index 96132cf..7eb092c 100644 (file)
@@ -103,6 +103,8 @@ my %supported_methods = (
 
   # ## other stuff ##
   redirect_to            => 1,  # window.location.href = <TARGET>
+
+  reinit_widgets         => 0,  # kivi.reinit_widgets()
 );
 
 sub AUTOLOAD {
@@ -168,6 +170,7 @@ sub to_array {
 
 sub render {
   my ($self, $controller) = @_;
+  $self->reinit_widgets if $::request->presenter->need_reinit_widgets;
   return $controller->render(\$self->to_json, { type => 'json' });
 }
 
index e7ad009..4ea5b26 100644 (file)
@@ -19,6 +19,10 @@ use SL::Presenter::SepaExport;
 use SL::Presenter::Text;
 use SL::Presenter::Tag;
 
+use Rose::Object::MakeMethods::Generic (
+  scalar => [ qw(need_reinit_widgets) ],
+);
+
 sub get {
   return $::request->presenter;
 }
index fff9f5e..332d5db 100644 (file)
@@ -18,6 +18,8 @@ sub part_picker {
     join('', map { $params{$_} ? $self->input_tag("", delete $params{$_}, id => "${id}_${_}", type => 'hidden') : '' } qw(column type unit convertible_unit)) .
     $self->input_tag("", (ref $value && $value->can('description')) ? $value->description : '', id => "${id}_name", %params);
 
+  $::request->presenter->need_reinit_widgets($id);
+
   $self->html_tag('span', $ret, class => 'part_picker');
 }
 
index 78efe64..c072d08 100644 (file)
@@ -226,6 +226,8 @@ sub date_tag {
   push @classes, delete($params{class}) if $params{class};
   my %class    = @classes ? (class => join(' ', @classes)) : ();
 
+  $::request->presenter->need_reinit_widgets($params{id});
+
   return $self->input_tag(
     $name, blessed($value) ? $value->to_lxoffice : $value,
     size   => 11,
index 0477715..e096d52 100644 (file)
@@ -119,6 +119,7 @@ ns.eval_json_result = function(data) {
 
       // ## other stuff ##
       else if (action[0] == 'redirect_to')          window.location.href = action[1];
+      else if (action[0] == 'reinit_widgets')       kivi.reinit_widgets();
 
       else                                          console.log('Unknown action: ' + action[0]);
 
index bd169b2..ea892f5 100644 (file)
@@ -26,6 +26,17 @@ namespace("kivi", function(ns) {
   ns.setupLocale = function(locale) {
     ns._locale = locale;
   };
+
+  ns.reinit_widgets = function() {
+    $('.datepicker').each(function() {
+      $(this).datepicker();
+    });
+
+    if (ns.PartPicker)
+      $('input.part_autocomplete').each(function(idx, elt){
+        kivi.PartPicker($(elt));
+      });
+  };
 });
 
 kivi = namespace('kivi');