Bindings are normally two-way- a change to one side of the binding will flow to the other. However, deleting and re-adding a global may break this.
(note- this repro is somewhat fragile- the "Any" type seems important)
Create an empty dashboard
Add a LabelPart, bind an option to a global "Foo"
Create a global "Foo" with type Any and some value like "bar", and hit "Apply"
At this point, the LabelPart will still be in a "Fresh" state, which is wrong. It must be in an "Error" state, since the global it was bound to no longer exists. Continuing on...
Delete the global and hit Apply.
Create a new global "Foo" with type Any and a different value like "baz", and hit apply
At this point, the LabelPart won't update with the new value of Foo- likely because it was never checked to see if any missing globals could be bound, since it was still "fresh"
Duplicate the LabelPart- observe that the duplicate is bound correctly
Refresh the old/stale LabelPart and notice that the global updates, as does the other part
Change the value of the global and notice that only the duplicated LabelPart updates
There's 3 bugs here but they may all have the same root cause:
Global deletion doesn't mark bound options as errors
Re-adding a deleted global doesn't re-bind previously bound options
A global update is accepted by the framework regardless of whether the option was really 2-way-bound
Bindings are normally two-way- a change to one side of the binding will flow to the other. However, deleting and re-adding a global may break this.
(note- this repro is somewhat fragile- the "Any" type seems important)
At this point, the LabelPart will still be in a "Fresh" state, which is wrong. It must be in an "Error" state, since the global it was bound to no longer exists. Continuing on...
At this point, the LabelPart won't update with the new value of Foo- likely because it was never checked to see if any missing globals could be bound, since it was still "fresh"
There's 3 bugs here but they may all have the same root cause: