Rails仅在一个更新请求上多次更新

时间:2014-06-04 21:53:43

标签: javascript jquery ruby-on-rails ruby-on-rails-4

我有一个编辑器,用户可以编辑和粘贴文本,更改会通过AJAX自动保存在服务器中。

通过JS我监视textarea的状态,如下所示:

$("#editor-area").bind "input propertychange", ->
    content = $("#editor-area").val()
    updateRequest = $.ajax(
      url: url
      data: 
        texto:
          contenido: content
      type: "PUT"
    )

我从here中提取,由Emma Li回答。

当我写一个字符时,控制台在执行和处理一个调用时会显示相同的信息,但很多次。它们太多了,我的控制台溢出并开始覆盖过去的调用,执行完全相同的操作:使用新文本更新记录。

控制器中的更新方法类似于

def update
  respond_to do |format|
    if @text.update(text_params)
      format.html {
        redirect_to user_text_path(current_user, @text)
      }
      format.json { render :json => @texto }
    else
      format.html { redirect_to edit_user_path(@user, @text) }
    end
  end
end

该选项还有before_filter

def set_text_and_user
  @text = get_stuff_from_Db
  @user = @text.user
end

我一直试图调试这个东西,但到目前为止它已经打败了我。知道可能导致这种情况的原因吗?

1 个答案:

答案 0 :(得分:0)

我实际上认为,接受的答案更好。

我从未使用过propertychange事件,快速的Google搜索显示 - 这可能不是100%正确 - 它实际上是IE特定的事件。我不确定其他浏览器是如何(以及如果)支持的。我认为你只需要在textarea上监听keyup事件。

无论如何,至于你的问题。你可以采用不同的方式。他们都归结为使用计时器。你很可能不希望将每一个按键发送到你的后端,因为几个并发用户只会杀死它。

最常见的方法可能是限制。最简单的是,它捕获事件的函数检查自上一个事件以来的时间差,并且如果已经过了足够的时间则仅调用处理程序 。你可以谷歌搜索细节,我很确定有jQuery插件。