Update HTML Element with Ajax


#1

I have following files.

list.rhtml

    <%= render(:partial => 'item', :collection => @items) %>

_item.rhtml

  • <%= item.name %> <%= item.body %>
  • edit.rjs

    page.replace_html @item.id, :partial=>‘item’

    if I call /items/list I will get

    • ...
    • ...
    • ...

    And wenn I edit first item I will get

    • ...
    • ...
    • ...

    Sure I can controll it in _item.rhtml partial like this
    _item.rhtml

    <% if some_merker %>

  • <% end %> <%= item.name %> <%= item.body %> <% if some_merker %>
  • <% end %>

    and then set this merker=true for list-action and false for others, but
    it’s unelegant.

    Some Ideas?

    Sorry for my english.


    #2

    I generated a Patch for Rails to add the ability to do what you want, as
    I
    had the same issue - http://dev.rubyonrails.org/ticket/3246

    To work around this with the existing code, and without applying the
    patch,
    you can change your edit.rjs to this (copied from the patch code,
    written in
    email, so may need a little work):

    partial = render :partial => ‘item’
    page << “var html = ‘#{partial}’;”
    page << “element = $(#{item.id});”
    page << “if (element.outerHTML) {”
    page << " element.outerHTML = html.stripScripts();"
    page << “} else {”
    page << " var range = element.ownerDocument.createRange();"
    page << " range.selectNodeContents(element);"
    page << " element.parentNode.replaceChild("
    page << " range.createContextualFragment(html.stripScripts()),
    element);"
    page << “}”