如果双向bindng可以工作,为什么我们需要Polymer Observer?

时间:2016-12-02 13:44:07

标签: polymer

根据observer,它会观察到聚合物属性的所有更改。

但是,双向绑定(使用{{}})已经这样做了,对吧?为什么我们需要观察者来处理变化?

2 个答案:

答案 0 :(得分:3)

它们的相似之处在于,值变化会调用观察者和数据绑定的效果,但它们的目的不同。

双向数据绑定

  • 双向数据绑定是注释
  • 将元素A的属性设置为元素B中其他属性的值
  • B属性的任何更改都会自动更新A的属性,反之亦然

观察

  • 观察者是在一个或多个属性发生值更改时调用的函数
    • 示例:根据其enabled属性的值
    • 设置元素的操作模式
  • 观察者的目的不一定是设置另一个属性(与数据绑定不同)。它可以根据新的属性值调用另一个函数。
    • 示例:url属性更改时生成AJAX请求
  • 观察到的属性必须在单个元素中(例如,父元素无法观察子属性而不将其绑定到自己的属性副本)

答案 1 :(得分:1)

我认为你们两个都混淆了。

<dom-module id="my-element">
  <template>
    <paper-input value="{{myValue}}">
  </template>
  <script>
  Polymer({
    is:"my-element",
    properties:{
      myValue:{
        type:String
      }
    }
  </script>
 </dom-module>

value="{{myValue}}"可以读取,只要有任何更改 myValue 也会更新。

现在,考虑一下您希望在myValue更改时收到通知的情况。上面写的代码是不够的(是的,我知道你可以听value-changed事件来了解变化,我们稍后会再回过头来看)。为此,您需要在observer上添加myValue,然后您就会知道myValue何时发生了变化。

上面提到的案例有另一个解决方案,即听value-changed paper-input触发的two-way binding事件,但是你的属性没有绑定到任何元素的情况(它从db获取它的值)和你想知道它的价值何时发生变化。

总而言之,当您想知道某些不属于您自己的影子的属性的值已经改变并且当您想要了解的时候使用observer时,会使用WKWebView。你自己的dom中属性的变化