Unbind / bind против делегата в jQuery: какое решение лучше? - PullRequest
2 голосов
/ 06 октября 2011

У меня есть код jQuery, который обрабатывает привязку и привязку обработчиков событий к элементам, которые динамически добавляются на страницу. В коде есть функция-обертка, которая освобождает существующие обработчики от элементов с заданным префиксом id, а затем связывает обработчики событий, так что любые существующие элементы имеют обработчик, и любые вновь добавленные элементы с таким же префиксом id также получают его. Очевидно, что это делает дополнительную привязку / привязку к элементам с префиксом id, которые уже существуют, когда добавляется новый элемент. Отмена привязки выполняется для предотвращения присвоения существующим элементам нескольких обработчиков одного и того же типа.

С самого начала написания этого кода я узнал о функции делегата jQuery, которая, по-видимому, делает именно то, что я делал выше.

Будет ли функция делегата делать то, что я сделал, значительно лучше, так что будет стоить моего времени переписать мой текущий рабочий код, чтобы воспользоваться этим? Под лучшим я подразумеваю производительность, использование памяти или другие меры.

1 Ответ

1 голос
/ 06 октября 2011

Когда вы используете .delegate(), ожидается, что вы выберете элемент-предок, который будет прослушивателем событий для обозначенных потомков.Это здорово, потому что с самого начала вы привязываете слушателя, который должен быть более или менее «постоянным» на вашей странице, независимо от того, сколько допустимых целей добавлено или удалено из его потомственного дерева.

Это, безусловно,лучше, чем .click для динамических страниц, и лучше, чем использовать серию .bind и .unbind для элементов при их добавлении или удалении.

Однако это может быть равно использованию .bind()таким образом, что выбирается элемент-предок, который прослушивает щелчки по назначенным потомкам.Я не достаточно знаком с .bind(), чтобы точно сказать о преимуществах производительности.

-

Как отдельная сторона, не относящаяся конкретно к вашему вопросу, это более эффективная функция, чем .live(), поэтому, если у вас когда-нибудь возникнет желание использовать .live(), я бы настоятельнорекомендую .delegate() как лучший вариант.

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