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 -~----------~----~----~----~------~----~------~--~---

