当组件准备好后,如何在Polymer中动态注册新属性?

时间:2015-04-07 00:23:54

标签: javascript polymer web-component

问题

如果准备好后,如何在Web组件中动态注册新属性?

问题

让我们假设我们有一个天真的Web组件,如下面的[1]:

<polymer-element name="wc-bridge">
  <script>
    Polymer ('wc-bridge', {
      publish: {
        x: 0
      },
      observe: {
        x: 'xfn'
      },
      created: function () {
        this.publish.y=0;
        this.observe.y='yfn';
      },  
      xfn: function (ov, nv) {
        console.log ({key:'x', old: ov, new: nv});
      },
      yfn: function (ov, nv) {
        console.log ({key:'y', old: ov, new: nv});
      },
    });
  </script>
</polymer-element>

[1]。 http://jsbin.com/yakisayiwi/1

可以看出,x是在设计时绑定到xfn处理程序的属性。我还希望稍后在组件准备好时绑定一个新的属性y。我试图通过丰富publishobserve对象来更自然地实现这一点,但我的方法不起作用。我想这是因为我对这些对象的消化过程迟了。那么,有什么方法可以解决这个问题吗?

上下文

我确实意识到我的目标有点奇怪,但有一个原因。我正在尝试创建一个桥接组件,在更改泛型属性时触发事件,其中在配置时给出事件名称和属性。这是一个简单的用例:

<wc-bridge x="{{v}}" y="{{v}}"> <!-- x & y are unknown at design time -->
  <wc-bridge-event on="x" fire="e1"/> <!-- x & e1 are known by digesting this -->
  <wc-bridge-event on="y" fire="e2"/> <!-- y & e2 are known by digesting this -->
</wc-bridge> 

未答复的相关问题

http://goo.gl/xzKPKw

1 个答案:

答案 0 :(得分:0)

不确定是否可以,因为属性只加载一次。

如果我需要这样做,我只使用一个包含地图的属性{key:value}来管理,而不是像字符串这样的原语。然后观察属性并应用逻辑以了解如何处理新值。

希望这很有用