Как указать дочерние элементы только в обработчике событий 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'
}

Не пробовал, но может работать.