Polymer 聚合物中的数据绑定是如何工作的? (功能(){ 聚合物(“新标签”{ 值:“” }); })();
如果我更改DOM对象的Polymer 聚合物中的数据绑定是如何工作的? (功能(){ 聚合物(“新标签”{ 值:“” }); })();,polymer,Polymer,如果我更改DOM对象的值属性(在JS中),我可以看到文本字段的值发生了更改。 如果更改文本字段值,DOM对象属性值也会更改 但这两个更改都不会影响值属性 如果值属性没有更改,模型中的更改如何反映在视图中 我认为value={{{value}}是一种说法,“当value属性改变时,改变value属性,反之亦然”。但是如果value属性不是视图和模型之间的链接,那么如何传播更改 另外,value={{{value}}到底意味着什么?您没有看到输入的value属性上的绑定(例如,{{value}})发
值
属性(在JS中),我可以看到文本字段的值发生了更改。
如果更改文本字段值,DOM对象属性值也会更改
但这两个更改都不会影响值
属性
如果值
属性没有更改,模型中的更改如何反映在视图中
我认为value={{{value}}
是一种说法,“当value
属性改变时,改变value
属性,反之亦然”。但是如果value
属性不是视图和模型之间的链接,那么如何传播更改
另外,value={{{value}}
到底意味着什么?您没有看到输入的value
属性上的绑定(例如,{{value}}
)发生了变化,因为Polymer需要在该属性上建立双向绑定。如果将其替换为实际值,则该值将不再是数据绑定的
Polymer文档中有一整节内容是“数据绑定如何工作”:
我认为value={{{value}}
是一种说法,“当value
属性改变时,改变value
属性,反之亦然”
在引擎盖下,Polymer使用节点.bind()
库将元素的属性更改绑定到数据。输入尤其支持对其值
和选中属性进行双向数据绑定:
将属性值反射回属性。文档正在更新以反映这一点。要获得此行为,请在对polymer()
的调用中使用publish
属性,而不是在polymer元素
标记上使用attributes
属性,如下所示:
<link rel="import" href="../bower_components/polymer/polymer.html">
<polymer-element name="new-tag">
<template>
<input id="input" value="{{value}}" type="text" />
</template>
<script>
(function () {
Polymer("new-tag", {
value: ""
});
})();
</script>
</polymer-element>
非polymer元素(基本html标记)需要告诉polymer何时将按事件名称更新值。所以value={{value::eventname}}
对于文本输入->
Polymer({
publish: {
// won't reflect to an attribute
bigText: '',
// will reflect to an attribute
active: {value: false, reflect: true}
},
...
)};
在聚合物1.0中,对于天然元素或一般的非聚合物元素,有一种特殊的选择。您需要按照以下说明指定事件:输入:
value={{value::input}}
谢谢@ebidel。但我的问题是,当我更改我的新标记
元素的值
属性时,DOM中的哪些更改使输入字段获得我输入的新文本?当我更改聚合元素的value
属性时,Polymer如何知道它必须设置input\u field.value=
。类似地,当我通过键入来更改输入字段中的文本时,它会更改输入字段的值
属性,但是这种更改是如何传播到聚合元素的值
属性的呢?正如Eric所指出的,节点.prototype.bind()
上的实现(也称为HTMLInputElement.prototype.bind()`)完成你所问的所有工作。Link-rot已经吃掉了所有三个Link。
<input id="input" value="{{modelvalue::input}}" type="text" />