1

Rails アプリで CoffeeScript を使用していますが、リモート ajax フォームの送信を遅らせる必要があります。主な問題は、ユーザーがフォームに入力しなくても 250 ミリ秒が経過するとフォームが送信されるように、リクエストをデバウンスすることです。 .

現在、私はこのようなことが起こっているように見えますが、明らかにうまくいかないので、助けになるデバッグ出力が含まれています。

下の表を見ると、「デバウンス」したい関数が関数内にあることがわかります element.keyup (event) ->。どんな助けでも素晴らしいでしょう!

remoteTable =

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


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

** これがどのように機能するかのいくつかの例を集めることができれば、本当に役に立ちますか? ** underscore.js のやり方は見ましたが、これは私の古い方法です。

http://davidwalsh.name/function-debounce

4

2 に答える 2

1

オンラインの「try coffeescript」トランスレーター/ランナーがあるcoffeescript.orgで遊んだところ、どうやら

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 を使った作業はそれほど多くありませんが、かなり簡単に思えます。

于 2012-12-22T07:36:23.573 に答える
1

これには単純なタイムアウトを使用できます。空想する必要はありません。

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

  send: ->
    console.log('Sending request...')
于 2012-12-23T03:58:37.620 に答える