Как указать дочерние элементы только в обработчике событий Backbone.js?
У меня есть представление, в котором есть представление внутри него (тот же вид на самом деле, его рекурсивный). Я хочу, чтобы только внутренний вид обрабатывал событие из события 'a' onclick. Я попытался сделать это, указав только прямые дочерние элементы в селекторе, но он не работает.
iv попытался:
events: {
'click >a': 'toggle'
},
и
events: {
'click > a': 'toggle'
},
но они не работают, никаких предложений? (Примечание: делать такие вещи, как использование тегов и классов, не будет работать, потому что представление является рекурсивным (это означает, что и внутренние, и внешние имеют одинаковые определения событий)
Ответы
Ответ 1
Я столкнулся с той же проблемой и решил ее, прекратив распространение события в моем дочернем представлении. Например...
events: {
'click a': 'toggle'
},
toggle: function (e) {
// Stop event here.
e.stopImmediatePropagation();
// Do more stuff...
}
Это не отвечает на ваш вопрос о том, как указывать определенные дочерние селекторы, но не позволяет этому событию распространяться на другие обработчики.
Ответ 2
e.stopImmediatePropagation()
удобно, если у вас нет других событий, срабатывающих при нажатии этого конкретного элемента. То, что вы должны сделать в противном случае, сравнить e.currentTarget
с элементом, который вы хотите выбрать. То есть
events: {
'click a': 'toggle'
}
toggle: function(e) {
if (e.currentTarget == this.$el.find('a')[0]) {
...
}
}
Таким образом, если у вас есть родительское представление, которое также запускает событие при нажатии этой ссылки, оно не будет остановлено на e.stopImmediatePropagation();
Ответ 3
Возможно, вам придется указать стартовый селектор... что я не уверен, что предполагается, что используется селектор базы.
events: {
'click #parent > a': 'toggle'
}
Не пробовал, но может работать.