【发布时间】:2016-06-20 09:40:50
【问题描述】:
几天来,我尝试为 Polymer 提供一些“动态”元素 :) 不幸的是没有成功... 我的目标是在运行时添加一个元素,并通过聚合物数据绑定(以“自然”聚合物方式。没有另一个 stackoverflow answer 中建议的解决方法。)
请查看此小提琴 (https://jsfiddle.net/mkappeller/ken9Lzc7/) 或此问题底部的代码。 我真的希望那里的任何人都能够帮助我。 知道将来有一天是否有办法做到这一点也会有所帮助......?
window.addEventListener("WebComponentsReady", function() {
var myAppModule = document.getElementById("my-app");
var myApp = document.getElementsByTagName("my-app")[0];
myApp.set("global", {
text: "Init"
});
});
<base href="https://polygit.org/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link href="polymer/polymer.html" rel="import">
<link rel="import" href="paper-button/paper-button.html">
<link rel="import" href="paper-input/paper-input.html">
<dom-module id="my-app">
<template>
<paper-input label="global.text" value="{{global.text}}"></paper-input>
<paper-button raised id="addHeadline">Add Headline</paper-button>
<paper-button raised id="changeText">Change Text</paper-button>
<p>global.text: <{{global.text}}></p>
</template>
<script>
Polymer({
is: "my-app",
properties: {
global: {}
},
ready: function() {
this.count = 0;
this.$.addHeadline.addEventListener("click", () => {
var myApp = Polymer.dom(document.getElementById("my-app"));
var t = myApp.node.childNodes[1];
var heading = document.createElement("h1");
heading.textContent = "{{global.text}}";
// Append to my-app
Polymer.dom(this.root).appendChild(heading);
});
this.$.changeText.addEventListener("click", () => {
this.set("global.text", "count-" + this.count++);
});
}
});
</script>
</dom-module>
<my-app></my-app>
【问题讨论】:
-
您想将所有标题绑定到相同的文本内容,还是希望它们拥有自己的内容?无论哪种方式,您都应该使用绑定到数组属性的
dom-repeat -
嗨艾伦。我想将任何元素绑定到任何属性。 dom-repeat 在这里对我没有帮助。因为我必须在 dom-repeat 中定义模板内容。而且我不能即时修改模板内容。
-
您需要双向绑定还是一种方式就足够了?
-
@Tomasz:需要双向。
标签: javascript html binding polymer polymer-1.0