Repeater filtered by SEVERAL items of another repeater

repeater-widget

#1

Hi,

Is there a way to retrieve several data from one repeater and filter for ALL OF THAT in another repeater?

Pls think of having three repeaters - “item”, “color” and “mapping”.

“item” looks like this:
1: ball
2: square
3: triangle

“color” looks like this:
1: red
2: green
3: blue

“mapping” looks like this:
1: item_1 color_1
2: item_1 color_3
3: item_2 color_1
4: item_2 color_2
5: item_2 color_3
6: item_3 color_2
7: item_3 color_3

The data means:

  • the ball exists in red and blue
  • the square exists in red, green and blue
  • the triangle exists in green and blue

I want to pick an instance of the “item” repeater (like “triangle”) and review in the “mapping” repeater in which colors the item exists. Then I want to retrieve the color labels from the “color” repeater which indeed exist (“green” and “blue”).

B/c there for sure is much more data in the “color” repeater and much more crossings, I want to keep the mapping idea (instead of removing the “mapping” repeater, and in the “color” repeater showing nearly-identical rows several times, like “green triangle” and “blue triangle”).


#2

The short answer is, “Yes. Difficult, but yes”.

The longer answer depends on a lot of factors, but the biggest one is understanding how repeaters actually work. Repeaters are awesome but they aren’t as intuitive as they appear.

Repeaters simulate database-like functionality but they don’t work like one. There’s nothing like a “back-end call” in Axure. Repeaters render one row at a time, independently from one another.
As far as Axure is concerned, any data not rendered in the HTML doesn’t exist. This means timing is everything: have all the repeaters you want to use completely loaded before the logic to filter the “real” list is activated?

It’s also tricky using an event “inside” a repeater to trigger and event “outside” the repeater. If you look around the forums, you’ll see examples of how people use “invisible” events on widgets (OnRotate or OnMove are some of the most common ones), to trigger logic on another widget. It’s a bit like calling a function in traditional coding.

Honestly, it’s been a long time since I’ve needed to do anything that complicated with Axure. It’d probably take me a few days of playing around to remember how to make it all work. This might help at least start your search: Repeater delay - each row - no local variable, no wait-fx