2012-12-22 58 views
1

我在我的Rails應用程序中使用CoffeeScript,並且我需要延遲遠程ajax表單提交,我遇到的主要問題是刪除請求,以便表單將發送一次用戶在表單中輸入了250毫秒。使用咖啡因延遲(去抖)ajax請求

現在我有一些看起來像這樣的事情,顯然它不會工作,所以這有一些調試輸出,以幫助我。

看看下面的表格,你應該知道我想被「去抖」的功能在element.keyup (event) ->函數中,任何幫助都會很棒!

remoteTable = 

    bindEvents: (element) -> 
    element.keyup (event) -> 
     console.log(event) 


    send: (event) -> 
    console.log(event) 

**如果我能收集幾個這樣的例子,這將是非常有益的嗎? **我沒有看到underscore.js做的,但 這裏順便說一下,這是我的老方法:我只是不能換我的頭周圍應如何炒鍋:

http://davidwalsh.name/function-debounce

回答

1

你可以使用一個簡單的超時時間,不需要花哨。

remoteTable = 
    bindEvents: (element) -> 
    timeout = null 
    element.keyup (event) -> 
     clearTimeout(timeout) 
     timeout = setTimeout(remoteTable.send, 250) 

    send: -> 
    console.log('Sending request...') 
1

我發揮各地在coffeescript.org他們有一個網上 「試CoffeeScript的」 譯者/亞軍,似乎

remoteTableOrg = 
    bindEvents: (element) -> 
    element.keyup (event) -> 
     console.log(event) 
    send: (event) -> 
    console.log(event) 

轉化爲

var remoteTableOrg; 

remoteTableOrg = { 
    bindEvents: function(element) { 
    return element.keyup(function(event) { 
     return console.log(event); 
    }); 
    }, 
    send: function(event) { 
    return console.log(event); 
    } 
}; 

所以element.keyup實際上是一個以函數作爲參數的函數調用。

看到這種情況,我想

remoteTable = 
    bindEvents: (element) -> 
    element.keyup _.debounce((event) -> 
     console.log(event) 
    ,250) 
    send: (event) -> 
    console.log(event) 

,並得到:

var remoteTable; 

remoteTable = { 
    bindEvents: function(element) { 
    return element.keyup(_.debounce(function(event) { 
     return console.log(event); 
    }, 250)); 
    }, 
    send: function(event) { 
    return console.log(event); 
    } 
}; 

我沒有與任何嘗試,但我不知道的原因,這是行不通的。我不得不承認咖啡文字沒有做太多,但看起來非常簡單。