На данный момент мы загружаем прослушиватели событий для всего сайта из единого файла common.js для проекта Rails. Мы знаем (большинство) компромиссов, вовлеченных там, и просто пытаемся смягчить их. Как только наша базовая архитектура вступит в силу, мы можем переместить их в отдельные файлы по контроллеру или по виду.
На данный момент быстрый вопрос заключается в том, как мы можем активировать их только при необходимости, что порождает искаженный, псевдодзен-вопрос:
если прослушиватель событий объявляется в лесу, когда его никто не слышит, издает ли он звук?
Другими словами, если кто-то объявляет базового слушателя (т. Е. Ничего такого постоянного, как .live()
или .delegate()
) в javascript для данной страницы, и целевой элемент фактически не присутствует на этой данной странице, делает что-нибудь действительно происходит, кроме нескольких циклов, посвященных его оценке и проверке DOM на элемент? Он активен в памяти, ищет этот элемент? Что-то другое? Кажется, что никогда не выдается ошибка, что интересно, учитывая, что в других контекстах такой вызов вызовет нулевой / ноль / недопустимый тип ошибки.
Например:
$(document).ready(function () {
$('#element').bind('blur keyup', function);
}
Предположим, что #element
нет. Что-нибудь действительно происходит? Кроме того, лучше обернуть его в предварительный фильтр, например:
$(document).ready(function () {
if ($('#element')) {
$('#element').bind('blur keyup', function);
}
Или интерпретаторы .js в браузерах достаточно умны, чтобы просто игнорировать базовый прослушиватель, объявленный для элемента, которого нет в $(document).ready
? Должны ли мы просто объявить начальную простую форму выше и оставить ее при этом, или проверка первого элемента каким-то образом сэкономит нам несколько ценных ресурсов и / или позволит избежать некоторых скрытых ошибок, которые мы не видим? Или я пропускаю другой угол?
Спасибо!