2014-06-04 2 views
0

사용자가 텍스트를 편집하고 붙여 넣을 수있는 편집기가 있으며 변경 내용은 AJAX를 통해 자동으로 서버에 저장됩니다.하나의 업데이트 요청에서 여러 번 업데이트되는 레일

는 JS 통해 I는 다음과 같이, 텍스트 영역의 상태를 모니터링 : I 에마 리 의해 here로부터 대답을 추출

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

.

단일 문자를 쓰는 순간 하나의 호출이 수행되고 처리되지만 여러 번 콘솔에 동일한 정보가 표시됩니다. 그것들은 너무 커서 내 콘솔이 오버런되어 과거의 호출을 덮어 쓰기 시작합니다. 똑같은 일을합니다 : 새로운 텍스트로 레코드를 업데이트하십시오.

컨트롤러의 업데이트 방법은 외모도

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 

나는이 일을 디버깅하기 위해 노력했습니다,하지만 지금까지 나를 패배했다 . 무슨 일이 일어날 지 생각 해봐?

+0

왜 특별한 이유가 허용 된 답변 (http://stackoverflow.com/a/7165578/519295)에 가지 않았습니까? – bassneck

+0

예, 동일한 결과를 얻었지만 코드가 더 많습니다. 여러 번 업데이트가 발생했습니다. – Sebastialonso

답변

0

사실 저는 받아 들인 대답이 더 좋다고 생각합니다.

나는 결코 propertychange 이벤트를 사용하지 않았으며 빠른 검색 결과는 100 % 정확하지 않을 수도 있음을 보여줍니다. 실제로 IE 관련 이벤트입니다. 다른 브라우저에서 어떻게 지원되는지 확실하지 않습니다. 텍스트 영역에서 keyup 이벤트를 수신 대기해야한다고 생각합니다.

어쨌든, 귀하의 질문에. 당신이 갈 수있는 여러 가지 방법이 있습니다. 그들은 모두 타이머를 사용합니다. 여러 명의 동시 사용자가 단순히 그것을 죽이기 때문에 모든 키 누르기를 백엔드로 보내지 않으려 할 가능성이 큽니다.

가장 일반적인 방법은 아마도 제한됩니다. 가장 간단한 방법은 이벤트를 포착하여 이전 이벤트 이후의 시간차를 확인하고 충분한 시간이 지난 경우 핸들러를 호출하는 것입니다. 자세한 내용은 google을 참조하십시오. jQuery 플러그인이 있다는 것을 확신합니다.

관련 문제