diff --git a/src/style_manager/view/LayerView.js b/src/style_manager/view/LayerView.js index d612858eb..ad99de234 100644 --- a/src/style_manager/view/LayerView.js +++ b/src/style_manager/view/LayerView.js @@ -5,7 +5,7 @@ import PropertiesView from './PropertiesView'; export default Backbone.View.extend({ events: { click: 'active', - 'click [data-close-layer]': 'remove', + 'click [data-close-layer]': 'removeItem', 'mousedown [data-move-layer]': 'initSorter', 'touchstart [data-move-layer]': 'initSorter' }, @@ -58,9 +58,12 @@ export default Backbone.View.extend({ if (this.sorter) this.sorter.startSort(this.el); }, - remove(e) { - if (e && e.stopPropagation) e.stopPropagation(); + removeItem(ev) { + ev && ev.stopPropagation(); + this.remove(); + }, + remove(opts = {}) { const { model, props } = this; const coll = model.collection; const stackModel = this.stackModel; @@ -70,7 +73,7 @@ export default Backbone.View.extend({ if (stackModel && stackModel.set) { stackModel.set({ stackIndex: null }, { silent: true }); - stackModel.trigger('updateValue'); + !opts.fromTarget && stackModel.trigger('updateValue'); } props && props.remove(); diff --git a/src/style_manager/view/LayersView.js b/src/style_manager/view/LayersView.js index 797c86b8e..17935deef 100644 --- a/src/style_manager/view/LayersView.js +++ b/src/style_manager/view/LayersView.js @@ -15,7 +15,7 @@ export default Backbone.View.extend({ this.className = `${pfx}layers ${ppfx}field`; this.listenTo(collection, 'add', this.addTo); this.listenTo(collection, 'deselectAll', this.deselectAll); - this.listenTo(collection, 'reset', this.render); + this.listenTo(collection, 'reset', this.reset); this.items = []; var em = this.config.em || ''; @@ -111,9 +111,13 @@ export default Backbone.View.extend({ this.$el.find('.' + this.pfx + 'layer').removeClass(this.pfx + 'active'); }, + reset(coll, opts) { + this.clearItems(opts); + this.render(); + }, + render() { var fragment = document.createDocumentFragment(); - this.clearItems(); this.$el.empty(); this.collection.each(function(model) { @@ -133,8 +137,8 @@ export default Backbone.View.extend({ Backbone.View.prototype.remove.apply(this, arguments); }, - clearItems() { - this.items.forEach(item => item.remove()); + clearItems(opts) { + this.items.forEach(item => item.remove(opts)); this.items = []; } }); diff --git a/src/style_manager/view/PropertyStackView.js b/src/style_manager/view/PropertyStackView.js index ff19e112d..35e989778 100644 --- a/src/style_manager/view/PropertyStackView.js +++ b/src/style_manager/view/PropertyStackView.js @@ -192,6 +192,7 @@ export default PropertyCompositeView.extend({ const target = this.getTarget(); const valueComput = this.getComputedValue(); const selected = em.getSelected(); + const updateOpts = { fromTarget: 1 }; let resultValue, style, targetAlt, @@ -270,8 +271,8 @@ export default PropertyCompositeView.extend({ const toAdd = model.getLayersFromTarget(target, { resultValue, layersObj }) || layersObj; - layers.reset(); - layers.add(toAdd); + layers.reset(null, updateOpts); + layers.add(toAdd, updateOpts); model.set({ stackIndex: null }, { silent: true }); }, diff --git a/src/style_manager/view/PropertyView.js b/src/style_manager/view/PropertyView.js index e2d39857d..a6593d1b7 100644 --- a/src/style_manager/view/PropertyView.js +++ b/src/style_manager/view/PropertyView.js @@ -189,9 +189,9 @@ export default Backbone.View.extend({ * Triggers when the value of element input/s is changed, so have to update * the value of the model which will propogate those changes to the target */ - inputValueChanged(e) { - e && e.stopPropagation(); - this.model.setValue(this.getInputValue(), 1, { fromInput: 1 }); + inputValueChanged(ev) { + ev && ev.stopPropagation(); + this.model.setValueFromInput(this.getInputValue()); this.elementUpdated(); }, @@ -405,7 +405,10 @@ export default Backbone.View.extend({ this.setValue(value); } - this.getTargets().forEach(target => this.__updateTarget(target, opt)); + // Avoid target update if the changes comes from it + if (!opt.fromTarget) { + this.getTargets().forEach(target => this.__updateTarget(target, opt)); + } }, __updateTarget(target, opt = {}) {