OLD | NEW |
| (Empty) |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 library polymer_interop.src.js_element_proxy; | |
5 | |
6 import 'dart:html' show Element, DocumentFragment; | |
7 import 'dart:js' as js; | |
8 import 'package:web_components/web_components.dart' | |
9 show CustomElementProxyMixin; | |
10 | |
11 /// A mixin to make it easier to interoperate with Polymer JS elements. This | |
12 /// exposes only a subset of the public api that is most useful from external | |
13 /// elements. | |
14 /// | |
15 /// Since mixins can't mixin or extend other mixins, you must also | |
16 /// mixin the [CustomElementProxyMixin] class from `web_components`. The | |
17 /// implements statement here enforces that. | |
18 abstract class PolymerProxyMixin implements CustomElementProxyMixin { | |
19 /// The underlying Js Element's `$` property. | |
20 js.JsObject get $ => jsElement[r'$']; | |
21 | |
22 /// By default the data bindings will be cleaned up when this custom element | |
23 /// is detached from the document. Overriding this to return `true` will | |
24 /// prevent that from happening. | |
25 bool get preventDispose => jsElement['preventDispose']; | |
26 set preventDispose(bool newValue) => jsElement['preventDispose'] = newValue; | |
27 | |
28 /// Force any pending property changes to synchronously deliver to handlers | |
29 /// specified in the `observe` object. Note, normally changes are processed at | |
30 /// microtask time. | |
31 /// | |
32 // Dart note: renamed to `deliverPropertyChanges` to be more consistent with | |
33 // other polymer.dart elements. | |
34 void deliverPropertyChanges() { | |
35 jsElement.callMethod('deliverChanges', []); | |
36 } | |
37 | |
38 /// Inject HTML which contains markup bound to this element into a target | |
39 /// element (replacing target element content). | |
40 DocumentFragment injectBoundHTML(String html, [Element element]) => | |
41 jsElement.callMethod('injectBoundHTML', [html, element]); | |
42 | |
43 /// Creates dom cloned from the given template, instantiating bindings with | |
44 /// this element as the template model and `PolymerExpressions` as the binding | |
45 /// delegate. | |
46 DocumentFragment instanceTemplate(Element template) => | |
47 jsElement.callMethod('instanceTemplate', [template]); | |
48 | |
49 /// This method should rarely be used and only if `cancelUnbindAll` has been | |
50 /// called to prevent element unbinding. In this case, the element's bindings | |
51 /// will not be automatically cleaned up and it cannot be garbage collected by | |
52 /// by the system. If memory pressure is a concern or a large amount of | |
53 /// elements need to be managed in this way, `unbindAll` can be called to | |
54 /// deactivate the element's bindings and allow its memory to be reclaimed. | |
55 void unbindAll() => jsElement.callMethod('unbindAll', []); | |
56 | |
57 /// Call in `detached` to prevent the element from unbinding when it is | |
58 /// detached from the dom. The element is unbound as a cleanup step that | |
59 /// allows its memory to be reclaimed. If `cancelUnbindAll` is used, consider | |
60 ///calling `unbindAll` when the element is no longer needed. This will allow | |
61 ///its memory to be reclaimed. | |
62 void cancelUnbindAll() => jsElement.callMethod('cancelUnbindAll', []); | |
63 } | |
OLD | NEW |