[Twisted-web] Adding athena.LiveElement to an already-rendered
LivePage
Jean-Paul Calderone
exarkun at divmod.com
Sun Nov 9 16:09:32 EST 2008
On Sun, 09 Nov 2008 21:09:41 +0100, Michał Pasternak <michal.dtz at gmail.com> wrote:
>Jean-Paul Calderone pisze:
>>On Sun, 09 Nov 2008 13:28:26 +0100, Michał Pasternak <michal.dtz at gmail.com>
>>wrote:
>>>Hi,
>>>
>>>I want to be able to add athena.LiveElement to an already rendered
>>>LivePage. Quick Googling revealed this blog entry:
>>>
>>> http://techblog.ironfroggy.com/2006/01/nevow-post-render-injection-
>>>of.html
>>>
>>>I'd like to know, if there are any other, simpler ways to do that - or,
>>>maybe, is there a preferred method to do that in the API already?
>>
>>See Nevow.Athena.Widget.addChildWidgetFromWidgetInfo.
>This method will not add the markup automatically. Am I right?
>
>I want to append incoming LiveFragments to the page.
>
>Right now, I am doing something like this on the client:
>
>// import Divmod.Runtime
>
>What.Ever = Nevow.Athena.Widget.subclass('What.Ever');
>What.Ever.methods =(
>
> function foo(self) {
> d = self.callRemote('getLiveFragment');
>
> d.addCallback(
>
> function liveFragmentReceived(lf) {
>
> d2 = self.addChildWidgetFromWidgetInfo(lf);
>
> d2.addCallback(
>
> function added(res) {
>
> d = Divmod.Runtime.theRuntime.parseXHTMLString(
> lf.markup).documentElement;
>
> self.nodeById('lastNode').appendChild(d);
>
> });
>
> });
You don't have to parse the markup. It's already parsed. The DOM
element which results is the `node´ attribute of the Widget instance
(which you get as `res´ - the result of the callback). You shouldn't
use any attributes of `lf´, since it is an opaque handle: there is no
API stability guarantee about it. The *only* thing you can do with it
is pass it to `addChildWidgetFromWidgetInfo´.
Jean-Paul
More information about the Twisted-web
mailing list