Polymer 聚合物中的数据绑定是如何工作的? (功能(){ 聚合物(“新标签”{ 值:“” }); })();

Polymer 聚合物中的数据绑定是如何工作的? (功能(){ 聚合物(“新标签”{ 值:“” }); })();,polymer,Polymer,如果我更改DOM对象的值属性(在JS中),我可以看到文本字段的值发生了更改。 如果更改文本字段值,DOM对象属性值也会更改 但这两个更改都不会影响值属性 如果值属性没有更改,模型中的更改如何反映在视图中 我认为value={{{value}}是一种说法,“当value属性改变时,改变value属性,反之亦然”。但是如果value属性不是视图和模型之间的链接,那么如何传播更改 另外,value={{{value}}到底意味着什么?您没有看到输入的value属性上的绑定(例如,{{value}})发

如果我更改DOM对象的
属性(在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" />