2015-10-17 44 views
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請求?我很確定我弄亂了這些變量的範圍。

回答

0

解決方案:這是網址,愚蠢。 Ajax方法在每次更改事件時都重複相同的請求。在閱讀關閉關閉a bit並懷疑相關問題後,更簡單的看到,使用change事件發送的url在內部定義時保持相同的值。我只需要處理髮送UrlGetter而不是urldisplayDependent,現在它按預期工作。