[Seaside] Comet and #call:

Julian Fitzell jfitzell at gmail.com
Thu Aug 5 21:38:56 UTC 2010


Hi Andres,

I just realized you're using Seaside 2.8, so the details are a bit
fuzzy for me at this point. But I don't see anything that immediately
jumps out at me as being a problem there...

Julian

On Wed, Aug 4, 2010 at 10:54 PM, andres <andres at lifia.info.unlp.edu.ar> wrote:
> Hi Julian,
>              thanks for your response; I've tried your example but It
> doesn't quite fit my needs. I've been playing with different approaches and
> I came to something that fits my needs, but I have no idea if this may screw
> something in the underlying page flow. I've trying to adapt #call: to what I
> need, but I did this quite intuitively since I still don't know how the
> underlying continuation mechanism works in Seaside. This is what I've got so
> far:
>
> C1>>renderContentOn: html
>
> html div
>        id: 'contents';
>        with: [html anchor
>                        onClick: (html request callback: [Transcript print:
> (self myCall: C2 new)]);
>                        with: 'link'.
>                ].
>
> C1>>myCall: aComponent
>
>        | value |
>
>        value:=self myPrimCall: aComponent. "This call is blocking"
>        self push: self into: 'contents'. "This uses comet to render a
> component into a div. After myCall returns we replace the div contents to
> show self again"
>        ^value.
>
> C1>>myPrimCall: aComponent
>
>        self push: aComponent into: 'contents'. "Push aComponent render
> result into the div"
>        ^Seaside.AnswerContinuation currentDo: [ :cc | | event |
>
>    event := nil.
>
>    event := aComponent onAnswer: [ :value |
>
>                                                                    event
> remove.
>
>                                                                    cc value:
> value.].
>
>    Seaside.WARenderNotification raiseSignal.
>
>    ].
>
> C1>>renderContentOn: html
>
>        html anchor
>                        onClick: (html request callback: [self answer: 34]);
>                        with: 'Answer link'
>
>
> This seems to work ok in the following aspects:
> 1. The #call: / #answer: works ok. The 34 is not print on the transcript
> until I click on the 'Answer link' anchor. Also, if I remove the
> "Seaside.WARenderNotification raiseSignal" then #myCall: becomes
> non-blocking (which seems to be ok regarding the differences between #call:
> and #show:).
> 2. According to firebug only the resources needed for C2 are requested from
> the server when executing myCall: C2 new (and the same happens when
> answering from C2 and showing again C1).
>
> Do you think this can lead to breaking things in Seaside?
>
> Thanks in advance,
> Andrés
>
>
> Julian Fitzell escribió:
>>
>> On Mon, Aug 2, 2010 at 3:01 PM, andres <andres at lifia.info.unlp.edu.ar>
>> wrote:
>>>
>>> Hi Julian,
>>>
>>>> [snip]
>>>>
>>>> It would be quite straightforward to have a callback that does a
>>>> #show: and then returns just the new component's HTML for the JS to
>>>> put in the DOM.
>>>
>>> Could you give me a hint on how to do this? I.E. start the #call: process
>>> by
>>> triggering the continuation step but avoiding the html response to reach
>>> the
>>> browser? If that is possible I think I can handle the rest.
>>
>> Hi Andres,
>>
>> I guess you want to do something similar to following (untested). I do
>> think you'll run into trouble later figuring out what to return in the
>> generic case and where to put the returned content in the browser, but
>> I'll be interested to hear how far you get.
>>
>> Julian
>>
>> renderContentOn: html
>>  html anchor
>>    callback: [ self showAndRespondWith: someComponent ];
>>    with: 'link'
>>
>> showAndResponseWith: aComponent
>>  self show: aComponent.
>>  self requestContext respond: [ :response |
>>    response
>>      contentType: WAMimeType textHtml;
>>      nextPutAll: (aComponent rendererClass builder render: aComponent) ]
>> _______________________________________________
>> seaside mailing list
>> seaside at lists.squeakfoundation.org
>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>


More information about the seaside mailing list