Forum: Ruby on Rails Override helper (observe_field) and put JS at the bottom

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
F3f27949240208ffe170ff8ba6abe6ea?d=identicon&s=25 Arthur Chan (arthurccube)
on 2008-12-18 05:33
Is it possible to override a helper function and put its javascripts at
the bottom (using yield)?

I tried the follows in helper:
<code>
  # override observe field to put js at the bottom
  def observe_field(field_id, options = {})
    if @layout_options
      content_for :after_js do
        super(field_id, options )
      end
    else
      super
    end
  end

</code>

In view

<code>
<%=yield :after_js%>
</code>

But it seems not working.
F3f27949240208ffe170ff8ba6abe6ea?d=identicon&s=25 Arthur Chan (arthurccube)
on 2008-12-18 05:43
Arthur Chan wrote:
> Is it possible to override a helper function and put its javascripts at
> the bottom (using yield)?
>
> I tried the follows in helper:
> <code>
>   # override observe field to put js at the bottom
>   def observe_field(field_id, options = {})
>     if @layout_options
>       content_for :after_js do
>         super(field_id, options )
>       end
>     else
>       super
>     end
>   end
>
> </code>
>
> In view
>
> <code>
> <%=yield :after_js%>
> </code>
>
> But it seems not working.

Oops, I found the problem. I should not return anything when I put
things into content_for, so

<code>
  def observe_field(field_id, options = {})
    #super
    #return
    if @layout_options
      content_for :after_js_ready do
        super(field_id, options )
      end
      return "" # ****** don't return immediate results****
    else
      super
    end
  end
</code>


Cool! I am getting A in yslow now :D
This topic is locked and can not be replied to.