0
我一直在構建一個小的「插件」來重用Rails應用程序中的某些代碼,以根據父select元素和ajax的值構建和拆除select元素響應。所有的網絡服務和功能都運行正常,直到我開始將這些代碼分離成可重用的東西。下面是coffescript當前代碼:Ajax on Change不會覆蓋.done上的數據
$.fn.cascade = (urlGetter, paramGetter, callbacks)->
callbacks[type] = callbacks[type] || $.noop for type in ["success", "notFound"]
url = urlGetter.call(this)
eventParams = {url: url, paramGetter: paramGetter, callbacks: callbacks}
this.on 'change', eventParams, displayDependent
getRequest = (url, data) ->
$.ajax (
method: 'GET'
url: url
dataType: 'json'
data: data
)
displayDependent = (event) ->
url = event.data.url
params = event.data.paramGetter()
callbacks = event.data.callbacks
getRequest(url, params)
.done (data, textStatus, jqXHR) ->
statusCode = jqXHR.status
switch statusCode
when 200
callbacks["success"].call(this, data)
when 204
callbacks["notFound"].call(this, data)
else console.log 'Unexpected status code: ' + statusCode
.fail (jqXHR, textStatus, errorThrown) ->
console.log errorThrown
調用此方法在選擇這種方式:
$("someElement").cascade(urlGetter, paramGetter, callbacks)
所以,這部作品第一次更改事件。它用預期的數據構建選擇。第二次更改事件觸發時,成功回調在第一個更改事件被觸發時接收到相同的數據,從而使用舊數據構建選擇。
我該如何解決這個問題,以便.done回調中的數據變更會更改每個ajax請求?我很確定我弄亂了這些變量的範圍。