para imagen emplea atributo binding polymer web-component observers polymer-1.0

binding - imagen - Enlace de datos en un elemento polimérico insertado dinámicamente



atributo title de la imagen (2)

Desafortunadamente, creo que no es posible hacerlo de una manera "limpia". Para reemplazar el Path Observer, tenemos que agregar un enlace en los cambios de valores "foo" a los elementos dinámicos. El primer paso es observar los cambios en el valor de la propiedad "foo". El segundo paso es replicar los cambios en cada elemento dinámico creado.

<dom-module id="main-context"> <template> <one-element foo="{{foo}}"></one-element> <div id="dynamic"> </div> </template> </dom-module> <script> Polymer({ is: "main-context", // Properties used to make the link between the foo property and the dynamic elements. properties: { foo: { type: String, observer: ''fooChanged'' }, dynamicElements: { type: Array, value: [] } }, ready: function() { // injecting component into polymer and binding foo via PathObserver var el = document.createElement("another-element"); // Keeps a reference to the elements dynamically created this.dynamicElements.push(el); this.$.dynamic.appendChild(el); }, // Propagates the "foo" property value changes fooChanged: function(newValue) { this.dynamicElements.forEach(function(el) { el.foo = newValue; }); } }); </script>

Vea el ejemplo completo de Plunkr: http://plnkr.co/edit/TSqcikNH5bpPk9AQufez

Hay ocasiones en las que podríamos necesitar agregar un elemento personalizado dinámicamente a un contexto. Entonces:

  • El polímero insertado podría recibir algunas propiedades vinculadas a otra propiedad dentro del contexto, por lo que puede cambiar en consecuencia.

  • En el polímero 0.5 podríamos usar PathObserver para vincular una propiedad a una propiedad de contexto para un componente agregado recientemente. Sin embargo, no encontré una solución alternativa o equivalente en el polímero 1.0.

He creado un ejemplo para 0.5 y lo mismo para 1.0. Vea a continuación el código del polímero que hace la inyección. También puedes ver los ejemplos completos de plunker para mayor claridad.

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 into polymer and binding foo via PathObserver var el = document.createElement("another-element"); el.bind("foo", new PathObserver(this,"foo")); this.$.dynamic.appendChild(el); } }); </script> </polymer-element>

Por favor, vea el ejemplo completo de plunkr: 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 into polymer and binding foo via PathObserver var el = document.createElement("another-element"); // FIXME, there''s no a path observer: el.bind("foo", new PathObserver(this,"foo")); this.$.dynamic.appendChild(el); } }); </script>

Por favor, vea el ejemplo completo de plunkr: http://plnkr.co/edit/K463dqEqduNH10AqSzhp?p=preview

¿Conoces alguna solución temporal o equivalente con el polímero 1.0?


En este momento, no hay una forma directa de hacerlo. Debe realizar manualmente el doble enlace escuchando los cambios en la propiedad foo del elemento principal y escuchando el evento foo-changed del elemento creado mediante programación.

<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 the initial value of child''s foo property el.foo = this.foo; //listen to foo-changed event to sync with 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 with child''s foo property fooChanged: function(newValue) { if (this.$.el) { this.$.el.foo = newValue; } } }); </script>

Puede ver un ejemplo de trabajo aquí: http://plnkr.co/edit/mZd7BNTvXlqJdJ5xSq0o?p=preview