Bug: Updates correct scope when x-for looping over element with x-data #3504
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
solves #3447 (demos and discussion exist there)
When looping over an iterable with x-for, and the first child has an
x-data
scope, if the array changed, now containing new objects but which had the samekey
value, the scope would improperly update.This fixes that.
The cause
The x-for does update the scope of the child, but it naively would update only the newest scope on the element. The problem is that this would be, during the update, the scope created by the
x-data
and not thex-for
. The effects registered to the looped over object/values would be within the context of thex-for
provided synthetic scope. This scope would continue to have the initial value.The fix
Store reference to the scope provided by
x-for
and use that to directly update the synthetic scope, instead of naively updating the latest scope.