使用coffeescript延迟(去抖)ajax请求

我在我的rails应用程序中使用CoffeeScript,我需要延迟远程ajax表单提交,我遇到的主要问题是去除请求,以便表单将在250ms已经过去而没有用户输入表单时发送。

现在我有一些看起来像这样的东西,显然它不会工作所以这里有一些调试输出来帮助我。

看看下面的表格,你应该知道我想要“去抖”的function是在element.keyup (event) ->function中,任何帮助都会很棒!

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

**如果我能收集一些如何运作的例子,那将会非常有用吗? **我确实看到了underscore.js的方式,但是在这里,这是我的老方法:我无法解决这个问题:

http://davidwalsh.name/function-debounce

你可以使用一个简单的超时,不需要花哨。

 remoteTable = bindEvents: (element) -> timeout = null element.keyup (event) -> clearTimeout(timeout) timeout = setTimeout(remoteTable.send, 250) send: -> console.log('Sending request...') 

我在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); } }; 

我没有尝试过这个,但我不知道为什么这不起作用。 我不得不承认没有用coffeescript做太多,但看起来很简单。