# Flex repeater not clearing out dynamic instances, even when written to do so

**URL:** <https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912>\
**Category:** Ignition\
**Created:** [February 15, 2023, 8:03pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912 "2023-02-15T20:03:08Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![Dylan\_Francis](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dylan_francis/32/80503_2.png) [@Dylan\_Francis](https://forum.inductiveautomation.com/u/Dylan_Francis)\
**Post date:** [February 15, 2023, 8:03pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/1 "2023-02-15T20:03:08Z")

</div>

```auto
instance=[] 
instance.append({"instanceStyle": {"classes": ""}, "instancePosition": {},"timezone_description": {}}) 
newList = list(self.getChild("FlexRepeater").props.instances) + [instance]
self.getChild("FlexRepeater").props.instances = 0 self.getChild("FlexRepeater").props.instances = newList

```

so when i do this script my goal is to dynamically produce instances, but first i want to clear out all the old instances. this code does not work like this which is odd, because if i do just the `self.getChild("FlexRepeater").props.instances = 0` portion of the script, i do indeed clear out the instances, and when i do the `self.getChild("FlexRepeater").props.instances = newList` portion i do indeed update the list.

---

<div class="post-metadata">

**Author:** ![amy.sudibyo](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amy.sudibyo/32/38659_2.png) [@amy.sudibyo](https://forum.inductiveautomation.com/u/amy.sudibyo)\
**Post date:** [February 15, 2023, 10:11pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/2 "2023-02-15T22:11:12Z")

</div>

Where is this script located? What is triggering this script to execute?

---

<div class="post-metadata">

**Author:** ![cmallonee](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/cmallonee/32/6416_2.png) [@cmallonee](https://forum.inductiveautomation.com/u/cmallonee)\
**Post date:** [February 15, 2023, 10:26pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/3 "2023-02-15T22:26:44Z")

</div>

```auto
# vvv makes an empty list
instance=[]
# vvv places an object into the empty list
instance.append({"instanceStyle": {"classes": ""}, "instancePosition": {},"timezone_description": {}})
# vvv makes a new list which contains all of the instances CURRENTLY in the Flex Repeater AND your new instance/object
newList = list(self.getChild("FlexRepeater").props.instances) + [instance]
# vvv sets the instances prop to be a numeric 0 value (bad idea)
self.getChild("FlexRepeater").props.instances = 0
# vvv sets the instances of the Flex Repeater to be the list which contains the old instances and the new one
self.getChild("FlexRepeater").props.instances = newList

```

If you goal is to remove the old instances, you should not make a list which contains those instances.

```auto
self.getChild("FlexRepeater").props.instances = [{"instanceStyle": {"classes": ""}, "instancePosition": {},"timezone_description": {}}]

```

If your goal is to _reset_ the existing instances back to some "known" state, you'd need to store the original structure of the instances either within the script or as a property.

---

<div class="post-metadata">

**Author:** ![Dylan\_Francis](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dylan_francis/32/80503_2.png) [@Dylan\_Francis](https://forum.inductiveautomation.com/u/Dylan_Francis)\
**Post date:** [February 15, 2023, 11:45pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/4 "2023-02-15T23:45:11Z")

</div>

it is a message handler being triggered from startup and from a button

---

<div class="post-metadata">

**Author:** ![Dylan\_Francis](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dylan_francis/32/80503_2.png) [@Dylan\_Francis](https://forum.inductiveautomation.com/u/Dylan_Francis)\
**Post date:** [February 15, 2023, 11:49pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/5 "2023-02-15T23:49:26Z")

</div>

i dont want to store instances. i want it when i press a button i drop all instances that are currently in the repeater, and i rebuild new instances of randomly generated users

---

<div class="post-metadata">

**Author:** ![cmallonee](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/cmallonee/32/6416_2.png) [@cmallonee](https://forum.inductiveautomation.com/u/cmallonee)\
**Post date:** [February 16, 2023, 2:19am UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/7 "2023-02-16T02:19:51Z")

</div>

The code you've supplied will always set the Flex Repeater to have exactly one instance, with a `timezone_description` parameter which will be passed to the instance, but that object will always be empty.

If you want `n` number of instances, then you need to append multiple instance objects into your `instance` variable and then set the instances to this list of multiple instances.

```auto
instance=[]
timezone_name_list=[] # This is unused in your code, so I don't know its purpose
desired_count_of_instances = 5
for x in range(desired_count_of_instances):
 	self.getChild("FlexRepeater").props.instances = []
    instance.append({"instanceStyle": {"classes": ""}, "instancePosition": {},"timezone_description": {}})
    self.getChild("FlexRepeater").props.instances = instance

```

---

<div class="post-metadata">

**Author:** ![cmallonee](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/cmallonee/32/6416_2.png) [@cmallonee](https://forum.inductiveautomation.com/u/cmallonee)\
**Post date:** [February 16, 2023, 2:24am UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/8 "2023-02-16T02:24:44Z")

</div>

Please do not edit older posts in significant ways which would alter their information; this makes it difficult to refer back to what you've done in a previous iteration.

---

<div class="post-metadata">

**Author:** ![Dylan\_Francis](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dylan_francis/32/80503_2.png) [@Dylan\_Francis](https://forum.inductiveautomation.com/u/Dylan_Francis)\
**Post date:** [February 16, 2023, 10:37am UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/9 "2023-02-16T10:37:39Z")

</div>

sorry buddy i thought i was making it more clear, i felt my initial post was perhaps a bit rushed

---

<div class="post-metadata">

**Author:** ![Dylan\_Francis](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dylan_francis/32/80503_2.png) [@Dylan\_Francis](https://forum.inductiveautomation.com/u/Dylan_Francis)\
**Post date:** [February 16, 2023, 10:40am UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/10 "2023-02-16T10:40:47Z")

</div>

the problem with this when i use my button to call it, it does not delete the original set of instances.

so if i have 2 instances already and i want two more, i set the range to 2, and i expect the template repeater to drop the 2 instances it already has, and build two more, but it doesnt.

---

<div class="post-metadata">

**Author:** ![cmallonee](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/cmallonee/32/6416_2.png) [@cmallonee](https://forum.inductiveautomation.com/u/cmallonee)\
**Post date:** [February 16, 2023, 4:05pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/11 "2023-02-16T16:05:14Z")

</div>

```python
def runAction(self, event):
	instances=[]
	desired_count_of_instances = 2
	for x in range(desired_count_of_instances):
	    instances.append({"instanceStyle": {"classes": ""}, "instancePosition": {},"input": x})
	self.getSibling("FlexRepeater").props.instances = instances

```

This code worked for me.

**Some notes:**

- Avoid setting properties inside of loops when you can.
- I've supplied a parameter of my own based on the View I was using, but it doesn't change the functionality of the code.
- I also renamed the `instance` variable, just because I always expect lists to reflect multiple values.

> [@Dylan\_Francis](#):
>
> this script is being called by a button and this is a message handler scenario.

Probably just a communication issue, but the script you've been providing could not be based in a Button because Buttons aren't containers and your `getChild` functions would throw errors. Did you mean that there exists a Button which triggers a Message Handler which lives on the parent of the Flex Repeater?

---

<div class="post-metadata">

**Author:** ![Dylan\_Francis](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dylan_francis/32/80503_2.png) [@Dylan\_Francis](https://forum.inductiveautomation.com/u/Dylan_Francis)\
**Post date:** [February 20, 2023, 3:21pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/12 "2023-02-20T15:21:55Z")

</div>

yes indeed the button does trigger a message handler. i tried testing the message handling by adding a text box and having the script write "populate users successful" into the box. that code works well.

my flex repeater still does not behave appropriately though

```
instances=[]
timezone_name_list=[]
self.getChild("TextArea_1").props.text = 'populate users successful'
for x in range(12):
	instances.append({"instanceStyle": {"classes": ""}, "instancePosition": {}})
self.getChild("FlexRepeater").props.instances = instance

```

we write to the box, but the flex repeater will not update.

---

<div class="post-metadata">

**Author:** ![smcfarlane](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/smcfarlane/32/42150_2.png) [@smcfarlane](https://forum.inductiveautomation.com/u/smcfarlane)\
**Post date:** [February 20, 2023, 3:38pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/13 "2023-02-20T15:38:53Z")

</div>

Not sure if this is a typo or not but in your loop you are using the list

> instance **s**.append

but at the end you use "instance"

> self.getChild("FlexRepeater").props.instances = instance

---

<div class="post-metadata">

**Author:** ![Dylan\_Francis](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dylan_francis/32/80503_2.png) [@Dylan\_Francis](https://forum.inductiveautomation.com/u/Dylan_Francis)\
**Post date:** [February 20, 2023, 3:41pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/14 "2023-02-20T15:41:32Z")

</div>

you are correct, my whoopsie.

now we still dont work, but i have corrected it to the following:

def onMessageReceived(self, payload):  
instances=  
timezone\_name\_list=  
self.getChild("TextArea\_1").props.text = 'populate users successful'  
for x in range(12):  
instances.append({"instanceStyle": {"classes": ""}, "instancePosition": {}})  
self.getChild("FlexRepeater").props.instances = instances

---

<div class="post-metadata">

**Author:** ![cmallonee](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/cmallonee/32/6416_2.png) [@cmallonee](https://forum.inductiveautomation.com/u/cmallonee)\
**Post date:** [February 20, 2023, 5:10pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/15 "2023-02-20T17:10:01Z")

</div>

> [@Dylan\_Francis](#):
>
> "populate users successful" into the box. that code works well.

This logging is nearly useless because you do it before actually setting any instances. The only information you can glean from it is that the script is being executed.

If you aren't able to get the script working you'll need to reach out to Support as the script works for me - even within a message handler.

---

<div class="post-metadata">

**Author:** ![Dylan\_Francis](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dylan_francis/32/80503_2.png) [@Dylan\_Francis](https://forum.inductiveautomation.com/u/Dylan_Francis)\
**Post date:** [February 20, 2023, 5:26pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/16 "2023-02-20T17:26:51Z")

</div>

if you repeatedly hit the button does it produce new results for you? i can get it to work once, but if i hit the button to generate a new user it does not change the user.

---

<div class="post-metadata">

**Author:** ![cmallonee](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/cmallonee/32/6416_2.png) [@cmallonee](https://forum.inductiveautomation.com/u/cmallonee)\
**Post date:** [February 20, 2023, 7:13pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/17 "2023-02-20T19:13:54Z")

</div>

```auto
	instances=[]
	timezone_name_list=[]
	self.getChild("FlexRepeater").props.instances = []
	for x in range(12):
		instances.append({"instanceStyle": {"classes": ""}, "instancePosition": {}})
	self.getChild("FlexRepeater").props.instances = instances

```

This code here clears out all existing instances before resetting to 12 empty instances.

---

<div class="post-metadata">

**Author:** ![Dylan\_Francis](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dylan_francis/32/80503_2.png) [@Dylan\_Francis](https://forum.inductiveautomation.com/u/Dylan_Francis)\
**Post date:** [February 21, 2023, 5:26pm UTC](https://forum.inductiveautomation.com/t/flex-repeater-not-clearing-out-dynamic-instances-even-when-written-to-do-so/69912/18 "2023-02-21T17:26:17Z")

</div>

i swore i tried that, but you are right my friend, it works. smooth as a hot knife through butter. many thanks to you brother. i appreciate you.

i did have to add a bit more to it for it to work properly, it wouldnt load properly without a sleep.  
instances=  
timezone\_name\_list=  
self.getChild("FlexRepeater").props.instances =   
time.sleep(0.5)

did the trick.
