【发布时间】:2011-11-27 11:19:50
【问题描述】:
我知道标题不是很直观,所以我将尝试详细说明我的问题:
我正在创建一个 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 是由插件用户定义的,并且也在插件代码内部:参见代码:
方法后 jquery 插件
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"
输出
发送前插件 用户之前发送 插件成功 用户成功
尝试
正如您在代码中看到的,我尝试使用 jQuery 的命令extend。但它不起作用,因为$.ajax().beforeSend 只接受一个函数。
我也尝试访问ajaxUserOptions,但ajaxUserOptions 在事件success、beforeSend...中不可用,因为这些调用是异步的。
感谢大家的帮助!
【问题讨论】:
标签: jquery jquery-plugins coffeescript