Index: pkg/polymer/lib/src/loader.dart |
diff --git a/pkg/polymer/lib/src/loader.dart b/pkg/polymer/lib/src/loader.dart |
index 0417bcb5d4a3855322f890a448ae76c3a21a35b4..f80353223f5d7b39bd1d79eb5d3a120d956e2df0 100644 |
--- a/pkg/polymer/lib/src/loader.dart |
+++ b/pkg/polymer/lib/src/loader.dart |
@@ -103,11 +103,7 @@ void _hookJsPolymer() { |
polymerJs.callMethod('whenPolymerReady', |
[zone.bindCallback(() => Polymer._onReady.complete())]); |
- var polyElem = document.createElement('polymer-element'); |
- var proto = new JsObject.fromBrowserObject(polyElem)['__proto__']; |
- if (proto is Node) proto = new JsObject.fromBrowserObject(proto); |
- |
- JsFunction originalRegister = proto['register']; |
+ JsFunction originalRegister = _polymerElementProto['register']; |
if (originalRegister == null) { |
throw new StateError('polymer.js must expose "register" function on ' |
'polymer-element to enable polymer.dart to interoperate.'); |
@@ -127,5 +123,14 @@ void _hookJsPolymer() { |
return originalRegister.apply([name, extendee], thisArg: jsElem); |
} |
- proto['register'] = new JsFunction.withThis(registerDart); |
+ _polymerElementProto['register'] = new JsFunction.withThis(registerDart); |
} |
+ |
+// Note: we cache this so we can use it later to look up 'init'. |
+// See registerSync. |
+JsObject _polymerElementProto = () { |
+ var polyElem = document.createElement('polymer-element'); |
+ var proto = new JsObject.fromBrowserObject(polyElem)['__proto__']; |
+ if (proto is Node) proto = new JsObject.fromBrowserObject(proto); |
+ return proto; |
+}(); |