Два других метода, которые могут работать для вас:
1
events: {
'click a': 'link',
'click *:not(a, a *)': 'openPanel'
}
Тогда openPanel не будет захватывать click
события для любого <a>
или потомка <a>
(если у вас есть значок в вашем теге <a>
).
2
В верхней части метода openPanel
убедитесь, что целью события не является <a>
:
openPanel: function(event) {
// Don't open the panel if the event target (the element that was
// clicked) is an <a> or any element within an <a>
if (event && event.target && $(event.target).is('a, a *')) return;
// otherwise it's safe to open the panel as usual
}
Обратите внимание, что оба эти метода по-прежнему позволяют вызывать функцию openPanel
из другого места (например, из родительского представления или другой функции в этом представлении). Только не передавайте аргумент event
, и все будет хорошо. Вам также не нужно делать ничего особенного в вашей функции link
- просто обработайте событие click и продолжайте. Хотя вы, вероятно, все равно захотите позвонить event.preventDefault()
.