Как вы отправляете и прослушиваете пользовательские события в Polymer?

Я хочу, чтобы дочерний элемент отправлял пользовательское событие, а родительский элемент прослушивал его и предпринимал какие-то действия. Как мне это сделать при работе с Polymer?


person Shailen Tuli    schedule 26.09.2013    source источник
comment
возможный дубликат Как запустить пользовательское событие из Polymer Дартс?   -  person Seth Ladd    schedule 28.09.2013


Ответы (1)


Вы можете отправить пользовательское событие из полимерного элемента следующим образом:

dispatchEvent(new CustomEvent('nameOfEvent'));

Затем родительский элемент может прослушивать пользовательское событие следующим образом:

<child-element on-childspeaks="fireAway"></child-element>

Вот более полный пример, показывающий, как это работает. Во-первых, вот код дочернего элемента:

<!DOCTYPE html>

<polymer-element name="child-element">
  <template>
    <div on-click="dispatch">I am a child</div>
  </template>
  <script type="application/dart">
    import 'dart:html';
    import 'package:polymer/polymer.dart';

    @CustomTag('child-element')
    class ChildElement extends PolymerElement with ObservableMixin {

      dispatch(Event e, var detail, Node sender) {
        print('dispatching from child');
        dispatchEvent(new CustomEvent('childspeaks'));
      }
    }
  </script>
</polymer-element>

А вот код родительского элемента:

<!DOCTYPE html>
<link rel="import" href="child_element.html">
<polymer-element name="parent-element">
  <template>
    <div>I am the parent</div>
    <child-element on-childspeaks="fireAway"></child-element>
  </template>
  <script type="application/dart">
    import 'dart:html';
    import 'package:polymer/polymer.dart';

    @CustomTag('parent-element')
    class ParentElement extends PolymerElement with ObservableMixin {

      void fireAway() {
        window.alert('The child spoke, I hear');
      }
    }
  </script>
</polymer-element>
person Shailen Tuli    schedule 26.09.2013
comment
Нужна ли часть with ObservableMixin? - person Free Lancer; 26.08.2014