insert_html is for producing a bunch of javascript that will insert some
html. It’s most commonly used with rjs templates, although you could of
course use it whenever you needed that javascript.
There’s nothing wrong with having it in the helper file, but typically
you don’t want it in a rhtml template (since it won’t be evaluated). So
instead of callng insert_html … You should just do the render itself
in the right place. (ie if menu just does render :partial =>
‘navigation’ you should be ok
I need the javascript becasue the page / layout doesn’t fully reload.
What
I can’t figure out is how to
use a rjs template in this situation. Having it in the helper file
seems to
be the
only way it works , yet for some reason, it’s rendering the lines of
javascript to the screen along with
what is intended to be shown.
render :update and RJS templates do exactly this. They render
JavaScript the brwoser has to evaluate …
but they dont apply any tags because what they are
intentionally meant for are AJAX calls. and that AJAX Object evaluates
the JavaScript:
If you use a RJS template in a helper, it wont be evaluated as there’s
no AJAx Object to receive the JavaScript generated by the template.
I still cant get a clear pitcure of what you actually trying to do (you
say it doesn’t completely refresh … spounds like AJAX … where’s the
AJAX call then?), sure render :partial won’t work? did you try it?
From your code, you only render a partial through some javascript, and
then insert that javascript in a div tag thorugh a helper…
layout calls helper “menu” -> menu calls render :update > render
:update call render :partial> partial gets rendered … but IN
JavaScript.
why should this not work:
layout calls helper “menu” -> menu calls render :partial -> partial
gets render … in HTML (which is what you want obviously …)
Okay, I got this working without any javascript / Ajax calls. Just
rendering the navigation partial is fine.
Stuart
I think I understand what you’re trying to do but, as was noted earlier,
I think you may be mixing up two types of operation.
calling the helper from within your rhtml is evaluated when the whole
page is reloaded. The helper called render :update, which just returns
a big string of javascript. Thats treated as HTML text and is compiled
into your page.
using RJS to update the page. From within the RHTML, use prototype
to trigger an ajax call to some action. That action would call render
:update (and the insert_html etc). That would return a big string of
javascript back to prototype, which would evaluate it (thus inserting
the html).
You can think of 1) as html-page-compile-time and 2) as
html-page-run-time.
render :partial returns html which is included at compile time.
render :update returns javascript which is executed at runtime.
Since helpers are ‘compile-time’ you need to use partials and not
updates