как действительно работает метод обещания jquery?


Я действительно не понимаю, что delegate и promise есть.

по документам -

  • delegate свяжет селектор и событие с каким-то упаковочным контейнером, который можно будет использовать позже для текущих и будущих элементов.
  • promise() будет переназначить вещи обратно, когда он был впервые ограничен, если все загруженные матчи. Может быть, я действительно не понимаю этот метод обещания.

Что делать, если обертка все еще там, но содержимое в контейнере обертки изменилось и / или перезагрузилось через Ajax? Почему события не запускаются или не работают так, как это было бы в первый раз, когда он связан?

и да, я был на странице docs, я просто не понимаю их объяснения полностью.

1 62

1 ответ:

меня немного смущает этот вопрос. Я думаю, это потому, что вы смущает promise и delegate. Они на самом деле совершенно не связаны с особенностями jQuery. Я объясню каждый отдельно:

delegate

delegate это функция jQuery, которая была введена в jQuery 1.4.2. (Это более приятный подход к live функция, которая была добавлена в jQuery 1.3). Он решает конкретную проблему, которая приходит с изменением DOM, и особенно с AJAX-вызовами.

когда вы привязываете обработчик событий, вы привязываете его к выделению. Так что вы могли бы сделать $('.special').click(fn) чтобы привязать обработчик событий ко всем членам special класса. Вы привязываетесь к этим элементам, поэтому, если вы затем удалите класс из одного из этих элементов, событие все равно будет вызвано. И наоборот, если вы добавляете класс к элементу (или добавляете новый элемент в DOM), он не будет привязан к событию.

есть особенность Javascript, которая смягчает это называется "событие пузырится". Когда событие инициируется, сначала браузер уведомляет элемент, где произошло событие. Затем он поднимается по дереву DOM и уведомляет каждый элемент предка. Это означает, что вы можете привязать обработчик событий к элементу высоко в дереве DOM, а события запускаются на любых дочерних элементах (даже тех, которые не существуют, когда обработчик был привязан).

delegate это реализация jQuery этого. Во-первых, вы выбираете родительский элемент. Затем вы указываете селектор-обработчик будет запущен только в том случае, если исходный элемент соответствует этому селектору. Затем вы указываете тип события, например click,submit,keydown, так же как и с bind. Затем, наконец, вы указываете обработчик событий.

$('#containingElement').delegate('a.special', 'click', function() {
    alert('This will happen on all links with the special class');
});

promise

promise является еще одним относительно недавним дополнением к набору функций jQuery. Это часть Deferred концепция, которая была введен в jQuery 1.5. (Я думаю, что сходство в звуке между "отложенным" и "делегатом", вероятно, является источником путаницы.) Это способ абстрагирования от сложностей асинхронного кода. Лучший пример этого-с AJAX-вызовами, так как объект возвращается $.ajax это