[Seaside] jQuery variable check for onBlur

jtuchel at objektfabrik.de jtuchel at objektfabrik.de
Wed Apr 10 13:09:53 UTC 2013

Hi Bob,

I guess what you are looking for is JSIfThenElse. I have no example at 
hand, but remember two things about it:
* It feels strange to send then:else: to a JSObject. Not very Smalltalkish.
* It does have a bug that I reported on this list a long time ago. It 
only renders the (if) ? then : else; form. So you should change 
#javascripContentOn: to

javascriptContentOn: aStream
     aStream nextPutAll: 'if('.
     super javascriptContentOn: aStream.
     aStream nextPutAll: ') {'.
     aStream javascript: self trueStatement.
     aStream nextPutAll: '} else {'.
     aStream javascript: self falseStatement.
     aStream nextPut: $}.

for more complex statements.

In your case, what you need to do first is produce a JSObject that 
represents the results of the client-side check "saveCancelButtonClicked 
== 1" and send it #then: or #then:else. I'd be interested in how you can 
create that JSObject... I guess it's easy....


Am 10.04.13 14:59, schrieb bobn at rogers.com:
> I posted this on Stack Overflow... no answer so far:
> How do I code a variable check into a Seaside jQuery onSuccess: script?
> I have an application with input fields that trigger a value change 
> followed by a re-rendering of the view. It works nicely to provide 
> lively feedback of domain data based on displayed values.
> The view shows 'Save' and 'Cancel' buttons if there are changes 
> pending. If the user clicks on either button right after an input 
> field, the onBlur: script of the input fields prevents the button 
> action from taking place. The recommended solution (button click event 
> lost due to the alert box in text box onblur event 
> <http://stackoverflow.com/questions/3245350/button-click-event-lost-due-to-the-alert-box-in-text-box-onblur-event>) 
> is to use the button's 'onmousedown' event to set a global variable 
> that the onBlur script checks.
> With my test code I can see the global 'saveCancelButtonClicked' being 
> set, but I don't know how to check the value in order to prevent the 
> rendering step.
> |html button
>    onMouseDown:  'saveCancelButtonClicked = 1;';  
>    ...
> html textInput
>   onBlur:  ((
>    html jQuery ajax
>        callback:  [:stringValue|  self  checkValue:  stringValue]  
>            value:  html jQuerythis  value)
>        onSuccess:  (
>          (html jQuery id:  'selectedComponent')  load html:  [:renderer|  
>            renderer script:  'console.log(saveCancelButtonClicked);'.
>            self  renderSelectedComponentOn:  renderer])  )]|
> I can see the console.log showing '1' if the save button is pressed. 
> So how do I check the value and skip the 'self 
> renderSelectedComponentOn:' step?
> It's easy enough to do in javascript (trivial if statement), but I 
> have not found an example in Seaside.
> Thanks for any help,
> Bob Nemec
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside

More information about the seaside mailing list