diff --git a/src/lib/bind/accessors.html b/src/lib/bind/accessors.html index f82ed02d..e3b5537c 100644 --- a/src/lib/bind/accessors.html +++ b/src/lib/bind/accessors.html @@ -174,8 +174,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN // ReadOnly properties have a private setter only // TODO(kschaaf): Per current Bind factoring, we shouldn't // be interrogating the prototype here - var info = model.getPropertyInfo && model.getPropertyInfo(property); - if (info && (info.readOnly || info.computed)) { + if (model.getPropertyInfo && model.getPropertyInfo(property).readOnly) { model['_set' + this.upper(property)] = setter; } else { defun.set = setter; diff --git a/src/standard/effectBuilder.html b/src/standard/effectBuilder.html index 4bf64ef0..6b1e166a 100644 --- a/src/standard/effectBuilder.html +++ b/src/standard/effectBuilder.html @@ -55,6 +55,8 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN this._addObserverEffect(p, prop.observer); } if (prop.computed) { + // Computed properties are implicitly readOnly + prop.readOnly = true; this._addComputedEffect(p, prop.computed); } if (prop.notify) { @@ -63,7 +65,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN if (prop.reflectToAttribute) { this._addPropertyEffect(p, 'reflect'); } - if (prop.readOnly || prop.computed) { + if (prop.readOnly) { // Ensure accessor is created Polymer.Bind.ensurePropertyEffects(this, p); } diff --git a/test/unit/bind-elements.html b/test/unit/bind-elements.html index b8ca814e..db05b7a5 100644 --- a/test/unit/bind-elements.html +++ b/test/unit/bind-elements.html @@ -248,6 +248,10 @@ computedvalue="[[boundcomputedvalue]]" computednotifyingvalue="[[boundcomputednotifyingvalue]]"> + +