admin管理员组

文章数量:1289880

Suppose the following is called from within a Polymer element:

this.fire("reset-counters");.

Will the reset-counters event be published to all elements that listen for that event or is in heard within the element that called this.fire() only?

Suppose the following is called from within a Polymer element:

this.fire("reset-counters");.

Will the reset-counters event be published to all elements that listen for that event or is in heard within the element that called this.fire() only?

Share Improve this question asked Sep 2, 2016 at 15:39 OleOle 47.2k70 gold badges237 silver badges443 bronze badges 1
  • to all listeners added, like standard custom events. – Supersharp Commented Sep 2, 2016 at 17:38
Add a ment  | 

1 Answer 1

Reset to default 10

By default this.fire() raises a bubbling even which will be handled by all elements up the DOM tree. Like most events in the browser.

Polymer does however offer an API similar to the native events API, The fire method takes three parameters: event name, details object and options object. In options, set bubbles: false to forbid the event from being pushed up the DOM tree.

See the example below to see how only the immediate listener fires when you click the second button.

Polymer({
  is: 'my-elem',
  bubbling: function() {
    this.fire('my-event', 'bubbling');
  },
  nonbubbling: function() {
    this.fire('my-event', 'nonbubbling', {
      bubbles: false
    });
  }
});
<!DOCTYPE html>
<html>
<head>
  <base href="https://polygit/ponents/">
  <script src="webponentsjs/webponents-lite.min.js"></script>
  <link href="polymer/polymer.html" rel="import"/>
</head>

<body>
  <div>
    <my-elem></my-elem>
  </div>
  
  <dom-module id="my-elem">
    <template>
      <input type="button" value="fire bubbling" on-tap="bubbling" />
      <input type="button" value="fire non-bubbling" on-tap="nonbubbling" />
    </template>
  </dom-module>
  
  <script>
    document.querySelector('my-elem')
      .addEventListener('my-event', handle('my-elem'));
    
    document.querySelector('div')
      .addEventListener('my-event', handle('div'));
    
    document
      .addEventListener('my-event', handle('document'));
    
    function handle(elem) {
      return function(e) {
        console.log(e.detail + ' handled on ' + elem);
      };
    }
  </script>

</body>
</html>

本文标签: javascriptDoes Polymer fire() publish the event globallyStack Overflow