Как предотвратить активацию ядра в 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 в самом элементе, который я нашел у предков целевой кнопки.