[Seaside-dev] Javascript Condition with else decoration

Philippe Marschall philippe.marschall at gmail.com
Wed Oct 1 17:08:41 UTC 2014


On Mon, Sep 22, 2014 at 10:21 PM, Esteban A. Maringolo
<emaringolo at gmail.com> wrote:
> I was trying to implement a classical "if {...} else {...}" object using
> JSDecorations.
> Then I found there is a JSCondition, but there is no way to describe an
> "else" statement.
>
> Also there is an JSIfThenElse decoration, but it is implemented as a ternary
> operator (x ? y : z) instead of 'if(x){ y} else {z}'
>
> So I added an extension to JSObject, named #condition:else: and also a
> JSConditionElse decoration which produces the expected output.
>
> Can this be added to the main trunk of the Javascript-Core package?
>
> The changes are attached.
>
>
> With these modifications I was able to transform this Javascript:
>     $('#ajaxId tbody').on( 'click', 'tr', function () {
>         if ( $(this).hasClass('selected') ) {
>             $(this).removeClass('selected');
>         }
>         else {
>             $('#ajaxId tr.selected').removeClass('selected');
>             $(this).addClass('selected');
>         }
>     } );
>
> Into this:
>
> | selClass |
> selClass := 'selected'.
> ^ (html jQuery: '#' , self ajaxId , ' tbody')
> on: 'click'
> selector: 'tr'
> do:
> ((html jQuery this removeClass: selClass)
> condition: (html jQuery this hasClass: selClass)
> else:
> (JSScript new
> add: ((html jQuery: '#' , self ajaxId , ' tr.' , selClass) removeClass:
> selClass);
> add: (html jQuery this addClass: selClass);
> yourself))
>
>
> Esteban A. Maringolo
>
> ps: An alternative solution would be to modify the JSIfThenElse, but this
> would require adding returns to the trueStatement and falseStatement of this
> class.

Because an if is not an expression in JavaScript?

Everything is a bit confusion at first but to me right now you change
looks like the simplest way to achieve what you want without
refactoring the whole hierarchies.

Cheers
Philippe


More information about the seaside-dev mailing list