RJS Chaining Problem

Hi,

I am having a problem with the way RJS generates code. Say I have
html like this:

<div id="parent">
  <div id="child1"></div>
  <div id="child2"></div>
</div>

and RJS code like this:

parent = page["parent"]
parent.down('#child1').highlight
parent.down('#child2').highlight

the generated JS code becomes:

$("1").down("#a").highlight().down("#b").highlight();

which is incorrect, because the second down() starts from within
#child1, whereas it should have started from within #parent.

By not declaring the “parent” variable and use page[“parent”] for
every highlight() call it would work, but it’s not very DRY. I could
also append a bunch of up() and down() in a long chain, but the code
gets messy difficult to follow.

I was wondering if there are any good ways to generate code that are
correct, clean, and DRY?

Thanks in advance!

Bob

Hi Bob,

On Fri, 2009-09-04 at 18:53 -0700, bob wrote:

parent = page["parent"]

By not declaring the “parent” variable
I think maybe the problem you’re having results from declaring a
variable, and perhaps naming a DOM element, ‘parent’. parent is a
Javascript property; as in:

window.parent

Try using a different name and see if the problem persists.

HTH,
Bill

Oh, actually it’s just a simplified example code to focus on the
concept. The problem is that when I use a ruby variable containing an
element multiple times, RJS chains them together while disregarding
the traversal methods, which generates incorrect code.