Polymer 同级元素之间的聚合发送/接收事件

Polymer 同级元素之间的聚合发送/接收事件,polymer,polymer-1.0,Polymer,Polymer 1.0,假设我有两个同级元素,触发一个事件。如何在不向父级添加命令式代码的情况下侦听事件 <dom-module id="parent-element"> <element-a></element-a> <element-b></element-b> </dom-module> 其中和是: <dom-module id="element-a"> <template> <styl

假设我有两个同级元素,
触发一个事件。
如何在不向父级添加命令式代码的情况下侦听事件

<dom-module id="parent-element">
  <element-a></element-a>
  <element-b></element-b>
</dom-module>

其中
是:

<dom-module id="element-a">
  <template>
    <style include="shared-styles">
    </style>
  </template>

  <script>
    Polymer({
      is: 'element-a',
      listeners: {
        'element-b': 'handleEvent',
      },
      ready: function() {
        console.log('fired from element a')
        this.fire('element-a', {employee: ''});
      },
      handleEvent: function (e) {
        console.log('received element b event', e)
      }
    });
  </script>
</dom-module>

<dom-module id="element-b">
  <template>
    <style include="shared-styles">
    </style>
  </template>

  <script>
    Polymer({
      is: 'element-b',
      listeners: {
        'element-a': 'handleEvent',
      },
      ready: function() {
        console.log('fired from element b')
        this.fire('element-b', {employee: ''});

      },
      handleEvent: function (e) {
        console.log('received element a event', e)
      }
    });
  </script>

聚合物({
是:'element-a',
听众:{
“元素b”:“handleEvent”,
},
就绪:函数(){
console.log('从元素a激发')
this.fire('element-a',{employee:'});
},
handleEvent:功能(e){
console.log('received element b event',e)
}
});
聚合物({
是:'element-b',
听众:{
“元素-a”:“handleEvent”,
},
就绪:函数(){
console.log('从元素b激发')
this.fire('element-b',{employee:'});
},
handleEvent:功能(e){
log('received element a event',e)
}
});
谢谢

你可以用它

在一个元素中添加一个
侦听器:

// element-b
<iron-signals on-iron-signal-element-a="_onSignalElementA"></iron-signals>

_onSignalElementA: function(e) {
  const newDate = e.detail;
  ...
}
HTMLImports.whenReady(()=>{
聚合物({
是:“x-foo”
});
聚合物({
是:'element-a',
_onClick:function(){
this.fire('iron-signal',{name:'element-a',data:new Date()});
}
});
聚合物({
是:'element-b',
_onSignalElementA:函数(e){
此._消息=`b已接收:${e.detail}`;
}
});
});

火灾事件
[[u信息]]

谢谢。我最终使用了它,但你知道为什么它建议避免使用它吗?注:只要你可以使用控制器(父元素)来调解沟通,就不要使用铁信号。
我认为这是一个设计决策。一方面,中介模式以额外的管道(以及潜在的冗长代码)为代价限制了数据范围。另一方面,使用
可以以可维护性为代价减少代码大小。在一个更复杂的例子中,
element-a
element-b
是远亲而不是直系兄弟姐妹,
仍然有效,但可能更难对代码进行推理。因此,另一种选择是让父代成为中介,从而导致代码冗长。是否有办法使代码更干净,并封装中介的行为,而不是直接将代码添加到父级中?
// element-a
this.fire('iron-signal', {name: 'element-a', data: new Date()});