Делегировать событие или кнопки только Backbone - PullRequest
2 голосов
/ 31 октября 2011

У меня есть html контент вроде:

<button class="submit">Save</button>

и вид как:

var MyView = Backbone.View.extend({
 events: {
    'click .submit': 'save'
 },

 save: function() {}
}

Когда я нажимаю на эту кнопку, я вижу, что магистраль не обрабатывает это событие, а вместо этого выполняются стандартные действия браузера (по крайней мере, в Chrome). То же самое для тега <a>. Я имею в виду, что Backbone не привязан к этим тегам.

В настоящее время я должен использовать <span> для кнопок, все работает нормально, но мне интересно, почему я не могу использовать стандартные теги для кнопок? Как я могу удалить стандартные события браузера и использовать магистраль для <a> или <button>

1 Ответ

5 голосов
/ 31 октября 2011

События - это просто «слушатели» - им сообщают, что событие произошло.Если вы хотите остановить событие, вы должны сделать

save: function(event) {
   event.preventDefault();
   event.stopPropagation();
}

Чтобы убедиться, что Backbone обрабатывает событие, убедитесь, что ваш слушатель (save) вызывается при нажатии.Backbone не останавливает поведение по умолчанию, вы должны сделать это самостоятельно в своей функции обработки событий.

Еще один совет: поместите свои кнопки в form и добавьте прослушиватель событий для submit form.Это будет работать и в том случае, если пользователь отправляет форму с помощью клавиатуры (событие нажатия только для мыши).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...