我在我的rails应用程序中使用CoffeeScript,我需要延迟远程ajax表单提交,我遇到的主要问题是对请求进行去抖动,以便表单将在没有用户输入的情况下发送250ms形式。
现在我有一些看起来像是这样的东西,显然它不会工作所以它有一些调试输出来帮助我。
看一下下表,您应该知道我想要“去抖”的功能在element.keyup (event) ->
功能范围内,任何帮助都会很棒!
remoteTable =
bindEvents: (element) ->
element.keyup (event) ->
console.log(event)
send: (event) ->
console.log(event)
**如果我能收集一些如何运作的例子,那将会非常有帮助吗? **我确实看到了underscore.js的方式,但是 在这里,这是我的旧方法:我无法解决这个问题:
答案 0 :(得分: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);
}
};
我没有尝试过任何事情,但我不知道为什么这不起作用。我不得不承认没有用coffeescript做太多事情,但看起来很简单。
答案 1 :(得分:1)
你可以使用简单的超时,不需要花哨。
remoteTable =
bindEvents: (element) ->
timeout = null
element.keyup (event) ->
clearTimeout(timeout)
timeout = setTimeout(remoteTable.send, 250)
send: ->
console.log('Sending request...')