2013-10-29 4 views
8

내가 그러나 나는 다음과 같은 내가 그렇다 의도의 대부분을 달성하기 위해 관리가 일반적으로 ACE 편집기와 자바 스크립트에 아주 새로운 해요 :ACE 편집기 변경 이벤트

내가 사용하거나 사용하지 않도록 설정하고 싶은 것은 '저장 '버튼을 문서에 뛰어난 수정이 있는지 여부에 따라 나는이 작업을 수행하려고했습니다'변화 : 장애인 '클래스 즉시 제거'이벤트

UndoManager.reset(); 

$('#save').addClass("disabled"); 

editor.on('change', function() { 

     if (UndoManager.hasUndo()) { 
      $('#save').removeClass("disabled"); 
     } 
     else { 
      $('#save').addClass("disabled"); 
     } 

    }); 

(가) 문서를로드에 '.

누군가 어떻게해야하는지 미리 알 수 있다면 많은 감사드립니다.

답변

17

을로드하고 isClean, markClean 방법을 undoManager에 사용하면 editor.session.getUndoManager().reset()으로 전화하십시오.

var saveButton = document.getElementById("save") 
 
var editor = ace.edit("editor") 
 
// using input event instead of change since it's called with some timeout 
 
editor.on("input", function() { 
 
    saveButton.disabled = editor.session.getUndoManager().isClean() 
 
}); 
 

 
saveButton.addEventListener("click", function() { 
 
    editor.session.getUndoManager().markClean() 
 
    saveButton.disabled = editor.session.getUndoManager().isClean() 
 
})
<script src="http://ajaxorg.github.io/ace-builds/src/ace.js"></script> 
 
<button id="save">save</button> 
 
<div id="editor" style="height:200px"></div>

+0

고마워, 그게 잘 작동합니다 (추가 및 제거 클래스 문 - 내 잘못을 전환했다.). 사용자가 실행 취소 버퍼의 처음으로 되 감은 다음 다시 사용할 수없는 클래스를 추가 할 때 캡처 할 수 있습니까? 어느 쪽이든, 당신의 도움을 많이 주시면 감사하겠습니다. – ensignos

+1

.isClean()을 .hasUndo()로 변경하고 (추가/제거 문을 뒤집은) 사용자가 실행 취소 버퍼의 시작 부분으로 되감기를하면 '저장'버튼이 비활성화됩니다. 또한 재실행을 지원합니다. 아주 멋지다. 입력 이벤트에 – ensignos

+1

!!! 그게 작동하지 않습니다 –

7

귀하의 솔루션은 단점이있다 : 저장 한 후, 당신은 실행 취소 할 수 없습니다. 대부분의 현대 편집자는 저장 후 실행 취소 할 수 있습니다.

원본 텍스트를 기록하고 텍스트가 변경 될 때마다 비교해 보는 것이 좋습니다. 텍스트가 원점과 같으면 저장 버튼을 비활성화하십시오.

+0

간단하고 효율적! – dduft

관련 문제