[Seaside] still struggling with the confusing scripting API's

Chris Muller ma.chris.m at gmail.com
Fri Oct 30 16:52:10 UTC 2015


I'm still trying to get my head around "what is the best way to write
javascript in Seaside.  I just spent an entire morning and still
failed to write the simplest expression via an aggregation of
Seaside's JSDecoration's.  This is what I want to render:

       new MyJavascriptObject(document.getElementById("id1"))

Using Seasides various brushes and canvas API, I could not even get
the first two words right.  I tried:

        html script with: (html javascript create access: 'MyJavascriptObject'))
        html script with: (html javascript create add: 'MyJavascriptObject'))
        html script with: (html javascript create alias: 'MyJavascriptObject'))
        html script with: (html javascript create assign: 'MyJavascriptObject'))

None of those produce "new MyJavascriptObject", what am I missing?
Its almost like there is a missing JSDecoration or capability missing
from JSStatement..?

After throwing up my hands with that, I decided to try "hard coding"
the Javascript strings into my Seaside rendering methods:

      html script with: (html javascript script: [ : s | s add: 'new
MyJavascriptObject(document.getElementById("', (aPufDomainComponent
htmlId),'") ])

which produces:

     new MyJavascriptObject(document.getElementById(\"id1\")

So that is pretty much what I want, but see that it is escaping the
quote characters, which makes it hard to read in the browser.  Are
those necessary or is there some way to avoid that?

I wanted to avoid having to put big chunks of hardcoded Javascript
strings into my Smalltalk code.  Any advice is appreciated.

 - Chris

PS -- I think the inconsistency of the API is part of my struggle.
JSObject script: can accept a Block, and WAHtmlCanvas>>#script: SAYS
it takes "aBlock", but that HAS to be wrong, because
WAScriptTag>>#with: ends up writing the Block's "greaseString" to the
stream...

thanks.


More information about the seaside mailing list