2013-10-29 12 views
8

मैं काफी ACE संपादक और सामान्य रूप में जावास्क्रिप्ट लेकिन मैं क्या मैं से अलग इरादा के सबसे प्राप्त करने के लिए निम्नलिखित में कामयाब रहे करने के लिए नए कर रहा हूँ:ऐस संपादक परिवर्तन घटना

मैं सक्षम या अक्षम करना चाहते हैं एक 'बचाने के 'बटन है कि क्या वहाँ दस्तावेज़ में बकाया संशोधनों के आधार पर और मैं के साथ ऐसा करने का प्रयास किया है' परिवर्तन: विकलांग 'वर्ग तुरंत हटा दिया जाता है' घटना

UndoManager.reset(); 

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

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

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

    }); 

एक दस्तावेज़ लोड पर '।

कोई भी अग्रिम धन्यवाद यदि कोई मुझे दिखा सकता है कि यह कैसे किया जाना चाहिए।

उत्तर

17

Call editor.session.getUndoManager().reset() after लदान the document और उपयोग isClean, markClean methods पर undoManager

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

संबंधित मुद्दे