Insert.html working weirdly

Not sure what’s going on here but the js is printing out on the page
along
with what should be rendered.

I have an index page, so in the helper, I created this function:

module IndexHelper
def menu
render :update do |page|
page.insert_html :bottom, ‘subnav’ , :partial => ‘navigation’
end
end
end

Then in the layout page:

<%= menu %>

Finally in the navigation partial:
<% if current_user.level = 1 %>

Navigation for Company

<% elsif current_user.level = 2 %>

Navigation for User

<% end %>

Yet , what is getting printed on the page is :

try { new Insertion.Bottom(“subnav”, “\n
Navigation for Company
\n\n\n”); } catch (e) { alert(‘RJS error:\n\n’ + e.toString());
alert(‘new Insertion.Bottom("subnav", "\n
Navigation for Company\n\n\n");’); throw e }

So, one thing is it’s spitting back the right text but twice,
then I don’t understand why the js is printing out.

TIA
Stuart

That’s what render :update does : it produces javascript.
Did you want to just render :partial => ‘navigation’ ?

Fred

n 11/20/06, Dark A. [email protected] wrote:

On 11/20/06, Frederick C. [email protected] wrote:

That’s what render :update does : it produces javascript.
Did you want to just render :partial => ‘navigation’ ?

Fred

I want the insert_html to update the div .

Stuart

On 11/20/06, Dark A. [email protected] wrote:

end

Navigation for Company

Navigation for Company\n\n\n\");'); throw e }

So, one thing is it’s spitting back the right text but twice,
then I don’t understand why the js is printing out.

Should I not have the insert_html in the helper.rb file ?

Stuart

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

Fred

On 11/20/06, Frederick C. [email protected] wrote:

That’s what render :update does : it produces javascript.
Did you want to just render :partial => ‘navigation’ ?

Fred

I guess. I don’t understand why there would be a rendering of the js
to
the page.
So, then yes I would jsut want to render the partial.

Stuart

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.

Stuart

On 11/21/06, Frederick C. [email protected] wrote:

Fred


Posted via http://www.ruby-forum.com/.

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 …)

On 11/21/06, Thorsten L [email protected] wrote:

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

Stuart Fellowes wrote:

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.

  1. 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.

  2. 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

Does this help at all ?

A.

Thorsten, my apologies for not replying sooner. Yes, your explanation
helped.

Stuart

On 11/21/06, Thorsten L [email protected] wrote:

Hey Alan, that pretty much sums up very nicely what i tried to say with
my whacky english :smiley:

Nice Explanation indeed …

Hey Alan, that pretty much sums up very nicely what i tried to say with
my whacky english :smiley:

Nice Explanation indeed …