Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 6146d714

Von Sven Schöling vor fast 9 Jahren hinzugefügt

  • ID 6146d71465314a4196eaa0852116aae3729f9c43
  • Vorgänger 6d574389
  • Nachfolger c0a22ab6

ClientJS: Values nicht trimmen

Wenn numerische Werte (also IVs und NVs) per Regex getrimmt werden,
wird dabei das POK Flag gesetzt, das anzeigt, dass der Scalar auch ein
valider String ist.

JSON kann dann nicht mehr unterscheiden welcher Typ der Scalar ist, und
nimmt String. Das führt aber dazu, dass alle Zahlen als Strings
encodiert werden.

Auch das wäre prinzipiell kein Problem, ausser dass Javascript keine
separaten Operatoren für Strings und Zahlen hat.

json.val1 + json.val2

wird also immer als concat aufgefasst und nicht als Addition, und

json.val ? true : false

ist immer true, weil "0" und "1" beide true in Javascript sind.

Unterschiede anzeigen:

SL/ClientJS.pm
152 152
  foreach my $idx (0..$num_args - 1) {
153 153
    # Force flattening from SL::Presenter::EscapedText and trim leading whitespace for scalars
154 154
    $args[$idx] =  "" . $args[$idx] if  ref($args[$idx]) eq 'SL::Presenter::EscapedText';
155
    $args[$idx] =~ s/^\s+//         if !ref($args[$idx]);
156 155
  }
157 156

  
158 157
  push @{ $self->_actions }, [ $method, @args ];

Auch abrufbar als: Unified diff