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]]">
+
+