diff --git a/lib/mixins/property-effects.html b/lib/mixins/property-effects.html
index 560d9cf312..cf8b22088d 100644
--- a/lib/mixins/property-effects.html
+++ b/lib/mixins/property-effects.html
@@ -371,13 +371,12 @@
*/
function runComputedEffects(inst, changedProps, oldProps, hasPaths) {
let computeEffects = inst.__computeEffects;
- let inputProps = changedProps;
- while (inputProps) {
- computeEffects && runEffects(inst, computeEffects, inputProps, oldProps, hasPaths);
- computeLinkedPaths(inst, inputProps, hasPaths);
- if ((inputProps = inst.__dataPending)) {
+ if (computeEffects) {
+ let inputProps = changedProps;
+ while (runEffects(inst, computeEffects, inputProps, oldProps, hasPaths)) {
Object.assign(oldProps, inst.__dataOld);
Object.assign(changedProps, inst.__dataPending);
+ inputProps = inst.__dataPending;
inst.__dataPending = null;
}
}
@@ -410,24 +409,22 @@
* API.
*
* @param {Element} inst The instance whose props are changing
- * @param {Object} changedProps Bag of changed properties
- * @param {boolean} hasPaths True with `props` contains one or more paths
+ * @param {string} path Path that has changed
+ * @param {*} value Value of changed path
* @private
*/
- function computeLinkedPaths(inst, changedProps, hasPaths) {
- let links;
- if (hasPaths && (links = inst.__dataLinkedPaths)) {
+ function computeLinkedPaths(inst, path, value) {
+ let links = inst.__dataLinkedPaths;
+ if (links) {
let link;
for (let a in links) {
let b = links[a];
- for (let path in changedProps) {
- if (Polymer.Path.isDescendant(a, path)) {
- link = Polymer.Path.translate(a, b, path);
- inst._setPendingPropertyOrPath(link, changedProps[path], true, true);
- } else if (Polymer.Path.isDescendant(b, path)) {
- link = Polymer.Path.translate(b, a, path);
- inst._setPendingPropertyOrPath(link, changedProps[path], true, true);
- }
+ if (Polymer.Path.isDescendant(a, path)) {
+ link = Polymer.Path.translate(a, b, path);
+ inst._setPendingPropertyOrPath(link, value, true, true);
+ } else if (Polymer.Path.isDescendant(b, path)) {
+ link = Polymer.Path.translate(b, a, path);
+ inst._setPendingPropertyOrPath(link, value, true, true);
}
}
}
@@ -1306,7 +1303,10 @@
}
}
this.__dataHasPaths = true;
- return this._setPendingProperty(path, value, shouldNotify);
+ if (this._setPendingProperty(path, value, shouldNotify)) {
+ computeLinkedPaths(this, path, value);
+ return true;
+ }
} else {
if (this.__dataHasAccessor && this.__dataHasAccessor[rootProperty]) {
return this._setPendingProperty(path, value, shouldNotify);