there're times when need adding custom element dynamically context. then:
the inserted polymer receive properties bound property inside context, can change accordingly.
at polymer 0.5 use pathobserver binding property context property added component. however, did not find workaround or equivalent @ polymer 1.0.
i have created example 0.5 , same 1.0. see below code of polymer makes injection. can see full plunker examples clarity.
ej 0.5:
<polymer-element name="main-context"> <template> <one-element foo="{{foo}}"></one-element> <div id="dynamic"> </div> </template> <script> polymer({ domready: function() { // injecting component polymer , binding foo via pathobserver var el = document.createelement("another-element"); el.bind("foo", new pathobserver(this,"foo")); this.$.dynamic.appendchild(el); } }); </script> </polymer-element>
please, see full plunkr example: http://plnkr.co/edit/2aj3lcgp1t42xo1eq5v6?p=preview
ej 1.0:
<dom-module id="main-context"> <template> <one-element foo="{{foo}}"></one-element> <div id="dynamic"> </div> </template> </dom-module> <script> polymer({ is: "main-context", ready: function() { // injecting component polymer , binding foo via pathobserver var el = document.createelement("another-element"); // fixme, there's no path observer: el.bind("foo", new pathobserver(this,"foo")); this.$.dynamic.appendchild(el); } }); </script>
please, see full plunkr example: http://plnkr.co/edit/k463dqeqdunh10aqszhp?p=preview
do know workaround or equivalent polymer 1.0?
right now, there no direct way it. should manually double binding listening changes in foo
property of parent element , listening foo-changed
event of programmatically created element.
<script> polymer({ is: "main-context", properties: { foo: { type: string, observer: 'foochanged' } }, ready: function() { var self = this; var el = this.$.el = document.createelement("another-element"); //set initial value of child's foo property el.foo = this.foo; //listen foo-changed event sync parent's foo property el.addeventlistener("foo-changed", function(ev){ self.foo = this.foo; }); this.$.dynamic.appendchild(el); }, //sync changes in parent's foo property child's foo property foochanged: function(newvalue) { if (this.$.el) { this.$.el.foo = newvalue; } } }); </script>
you can see working example here: http://plnkr.co/edit/mzd7bntvxlqjdj5xsq0o?p=preview
Comments
Post a Comment