diff --git a/lib/elements/dom-repeat.html b/lib/elements/dom-repeat.html index f08249c905..81c841caba 100644 --- a/lib/elements/dom-repeat.html +++ b/lib/elements/dom-repeat.html @@ -610,18 +610,20 @@ // If path was index into array... if (itemsIdx == parseInt(itemsIdx, 10)) { let itemSubPath = dot < 0 ? '' : itemsPath.substring(dot+1); - // See if the item subpath should trigger a full refresh... - if (!this.__handleObservedPaths(itemSubPath)) { - // If not, forward to the instance for that index - let instIdx = this.__itemsIdxToInstIdx[itemsIdx]; - let inst = this.__instances[instIdx]; - if (inst) { - let itemPath = this.as + (itemSubPath ? '.' + itemSubPath : ''); - // This is effectively `notifyPath`, but avoids some of the overhead - // of the public API - inst._setPendingPropertyOrPath(itemPath, value, false, true); - inst._flushProperties(); - } + // If the path is observed, it will trigger a full refresh + this.__handleObservedPaths(itemSubPath) + // Note, even if a rull refresh is triggered, always do the path + // notification because unless mutableData is used for dom-repeat + // and all elements in the instance subtree, a full refresh may + // not trigger the proper update. + let instIdx = this.__itemsIdxToInstIdx[itemsIdx]; + let inst = this.__instances[instIdx]; + if (inst) { + let itemPath = this.as + (itemSubPath ? '.' + itemSubPath : ''); + // This is effectively `notifyPath`, but avoids some of the overhead + // of the public API + inst._setPendingPropertyOrPath(itemPath, value, false, true); + inst._flushProperties(); } return true; } diff --git a/test/unit/dom-repeat.html b/test/unit/dom-repeat.html index 79176432f9..9d5cc2ba92 100644 --- a/test/unit/dom-repeat.html +++ b/test/unit/dom-repeat.html @@ -4088,6 +4088,24 @@