Как предотвратить активацию ядра в core-list, когда нажата кнопка со значком бумаги

У меня есть core-list с пользовательским элементом для каждого элемента:

<core-list-dart data={{data}} on-core-activate={{onCoreActivate}}>
  <template>
    <person-item item={{model}}></person-item>
  </template>
</core-list-dart>

Пользовательский элемент (person-item) имеет две кнопки:

<polymer-element name="person-item">
  <template>
    <paper-item>
      <div>Name: {{item.name}}</div>
      <button on-click={{onItemClick}}>Click me!</button>
      <paper-icon-button icon="menu" on-click={{onItemClick}}>Click me!</paper-icon-button>
    </paper-item>
  </template>
  <script type="application/dart" src="person_item.dart"></script>
</polymer-element>
  • Когда я нажимаю на элемент, как ожидалось, onCoreActivate метод называется.
  • Когда я нажимаю на элемент button как и ожидалось onItemClick метод называется и onCoreActivate метод не вызывается.
  • Когда я нажимаю на элемент paper-icon-button onItemClick метод называется, но и onCoreActivate метод называется.

Как я могу предотвратить core-activate событие в третьем случае?

Я пытался предотвратить распространение click событие из onItemClick метод, но без успеха.

Я также пытался предотвратить tap распространение событий, но без успеха.

1 ответ

Я помню, что у меня были некрасивые хаки, когда я сохранял флаг в течение заданного времени, когда пользователь нажимал кнопку в элементе списка. Но в последний раз, когда я проверял (core_elements 0.4), работала обработка клика по самому списку (CoreList) (т.е. не по элементу). Ниже псевдокод, где я проверяю целевой элемент, нажимаемый по id (в моем случае это PaperIconButton, но это не имеет значения). Я получаю событие активации ядра, когда пользователь нажимает на другое место в списке, но не получает его, когда пользователь нажимает на кнопку.

CoreList list = $['list'];
list.onClick.listen((Event e) {
  var target = e.target;
  if (target is Element) {
    if (target.id == "play") {
      // prevent sending the core-activate event
      e.preventDefault();

      // ... do my stuff here
    }
  }
});

Тогда вы можете спросить, откуда мы знаем, к какому пункту относится кнопка. Есть много способов. Я лично храню это в атрибуте data-id в самом элементе, который я нашел у предков целевой кнопки.

Другие вопросы по тегам