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.
This is my take on how we could possibly fix the layer-property-reactivity issue mentioned in #365.
To keep changes minimal I decided to wrap up OL layers and OL layer collections by proxy objects. The proxy objects behave mostly transparent and forward invocations to the underlying layer / collection objects, so they can be basically used as a drop-in. Apparently, use them only for Vue components when reactivity is required.
Using LayerProxy around an OL layer:
layerProxy = new LayerProxy(myLayer, ['legend', 'legendOptions'])
layerProxy.destroy()
layerProxy.getLayer()
Internally, the layer proxy traps the
getProperties()
andget()
methods to return a self managed object of key value pairs, which is synced via OL observables.Similarly, using LayerProxyCollection around an OL Collection:
collectionProxy = new LayerCollectionProxy(myLayerCollection, ['lid', 'displayInLayerList', 'isBaseLayer']);
collectionProxy .destroy()
collectionProxy.getCollection()
Internally, the collection proxy traps the
forEach()
,item()
andgetArray()
methods to return LayerProxy objects.So far, this only the proof of concept. Here is the list of (open) tasks: