Я знаю, что заголовок был не очень интуитивно понятным, поэтому я попытаюсь подробно описать мою проблему:
Я создаю плагин jQuery для выполнения асинхронных вызовов.С его помощью я могу, например, сделать сообщение, используя следующую команду:
$("form").bindAjaxPost "post"
Проблема в том, что я хотел бы создать обратные вызовы для этих событий (beforeSend
, complete
, success
, error
), например, команда будет выглядеть примерно так:
$("form").bindAjaxPost "post",
success: (data) -> console.log "user success #{data}"
beforeSend: () -> console.log "user beforeSend"
Обратите внимание, что событие beforeSend
и success
было определено пользователем плагина, а также внутренне в коде плагина:См. Код:
Метод post jquery plugin
post: (ajaxUserOptions)->
ajaxOptions =
type: "POST"
url: @options.url
data: $(@form).serialize()
dataType: @options.dataType
beforeSend: ->
console.log "plugin beforeSend"
complete: ->
console.log "plugin complete"
success: (data) ->
console.log "plugin success"
error: (request) ->
console.log "plugin error"
ajaxOptions = $.extend {}, ajaxUserOptions, ajaxOptions if ajaxUserOptions
$.ajax(ajaxOptions)
Задача
Я хотел бы, чтобы событие события было вызвано изнутри, а затемпользовательский плагин событий.(эта последовательность)
Пример выполнения
Команда
$("form").bindAjaxPost "post",
success: (data) -> console.log "user success #{data}"
beforeSend: () -> console.log "user beforeSend"
Вывод
Плагин перед отправкой пользователюbeforeSend плагин успех пользователь успех
попытки
Как вы можете видеть в коде, я попытался использовать команду extend
из jQuery.Но это не сработало, потому что $.ajax().beforeSend
принимает только одну функцию.
Я также пытался получить доступ к ajaxUserOptions
, но ajaxUserOptions
недоступен в событиях success
, beforeSend
..., поскольку эти вызовы асинхронные.
Спасибо всем за помощь!