Alberto -- awesome! Thanks for the tip. I'll try this later today. Seems to
be just what I need. JSLink now seems a lot less mysterious :)

Also, I've looked into what Adam Jones said about not being able to execute
scripts after page load by creating them on the fly and this seems to
definitely be the case. I don't have a copy of Opera, but did note this
thread: http://my.opera.com/community/forums/topic.dml?id=63445 what speaks
to version ~7.5 or so



On 12/5/06, Alberto Valverde <[EMAIL PROTECTED]> wrote:
>
>
>
> >
> > Hi everyone,
> >
> > I spent an awful lot of time last night learning that if I instantiate
> > a widget and call it's render method that the javascript files
> > referenced with "javascript = JSLink(...)" are apparently not made
> > available in the serialized output (or any other way I could find) to
> > be loaded into the document's head (or anywhere else for that
> > matter)...But obviously the javascript is automatically loaded into the
> > head for you when you call a widget's display() method from the kid
> > template.
> >
> > What I was trying to do was use render() to get a widget's HTML so that
> > I could shove it into a div at some point after a page had been loaded.
> > The HTML arrived just fine, but the JavaScript did not. This was
> > totally counter-intutive to me, so could someone please comment on why
> > render() doesn't include the JavaScript in a <script> tag as part of
> > the serialized output? I really am just trying to find a way to get a
> > widget's JavaScript so that it can be loaded into a page *without*
> > using display().
> >
> > Is there an approved way to get at the actual javascript with an
> > existing mechanism, or is my assumption that it's a "good idea" to try
> > and do this for purposes of loading JavaScript into the head after page
> > load actually a bad idea?
> >
> >
> > An example (not tested, but serves the example)
> >
> > def FooWidget(Widget):
> >
> >     template  = "..."
> >     javascript = [JSLink(...)]
> >
> >
> > def someMethodInController():
> >     foo = FooWidget()
> >     html = foo.render()
> >     #how to get javascript out of FooWidget with instantiation of
> > FooWidget?
> >     #I want to create a script element and shove it into a page after
> > page load
>
> You could fetch the resources by calling the widget's retrieve_css and
> retrieve_javascript methods and then rendering them manually.
>
> js = widget.retrieve_javascript()
> css = widget.retrieve_css()
>
> all_rendered_js = ''.join(j.render() for j in js)
> all_rendered_css = ''.join(c.render() for c in css)
>
> widget_plus_its_resources = ''.join([all_rendered_js, all_rendered_css,
> widget.render()]
>
> This is (more or less) what turbogears.view.templates.sitetemplate does
> with resources collected from all widgets you return in the output dict or
> list at tg.include_widgets in app.cfg.
>
> HTH,
>
> Alberto
>
>
> >
>


-- 
I'm switching to GMail! As of 1 Jan 07, I'll be using
[EMAIL PROTECTED], so please update your address
books.


--~--~---------~--~----~------------~-------~--~----~
 You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to