How to conditionally replace an element using RJS template

I have an RJS template that looks like this:

page.replace "id_#{@foo.id}", :partial => "row"

But I only want it to execute if "id_#{@foo.id}" is an element on the current page?

something like:

if page.exists?("id_#{@foo.id}")   page.replace "id_#{@foo.id}", :partial => "row" end

I have read through every API page that I can find and can't find such a beast? What would be the best way to do this?

Thanks

Mikel

not sure, but try this:

page << "if $('id_#{@foo.id}') {" page.replace "id_#{@foo.id}", :partial => "row" page << "}"

you can feed straight Javascripts into the page object with << (as documented in the API), so i think it *should* work

Thanks for the pointer!

You were almost there, the solution was:

  page << "elem = $('id_(#{@foo}');"   page << "if (elem) {"     page.replace "id_(#{@foo}", :partial => "row"   page << "}"

Needed the extra step.

Thanks :slight_smile:

Mikel

You shouldn’t need an extra step. Just some brackets.

page << “if( $(’ id_#{@foo.id}') ){” page.replace “id_#{@foo.id}”, :partial => “row”

page << “}”

That should be the equivalent of what you had.

Daniel