diff --git a/lib/utils/templatize.js b/lib/utils/templatize.js index 9f05135470..7d4ed9dd3f 100644 --- a/lib/utils/templatize.js +++ b/lib/utils/templatize.js @@ -360,11 +360,14 @@ function createTemplatizerClass(template, templateInfo, options) { } /** + * Adds propagate effects from the template to the template instance for + * properties that the host binds to the template using the `_host_` prefix. + * * @suppress {missingProperties} class.prototype is not defined for some reason */ function addPropagateEffects(template, templateInfo, options) { let userForwardHostProp = options.forwardHostProp; - if (userForwardHostProp) { + if (userForwardHostProp && templateInfo.hasHostProps) { // Provide data API and property effects on memoized template class let klass = templateInfo.templatizeTemplateClass; if (!klass) { @@ -423,6 +426,11 @@ function addNotifyEffects(klass, template, templateInfo, options) { } if (options.forwardHostProp && template.__dataHost) { for (let hprop in hostProps) { + // As we're iterating hostProps in this function, note whether + // there were any, for an optimization in addPropagateEffects + if (!templateInfo.hasHostProps) { + templateInfo.hasHostProps = true; + } klass.prototype._addPropertyEffect(hprop, klass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY, {fn: createNotifyHostPropEffect()});