2014-07-06 5 views
4

대화 상자를 사용하는 플러그인을 쓰고 있습니다.CKEditor에서 선택적으로 변경 이벤트 발생

대화 상자를 열기 위해 도구 모음 단추를 클릭하면 편집기에서 change 이벤트가 발생합니다. 대화 상자를 열 때이 이벤트를 사용하지 않으려면 어떻게합니까?

플러그인은 setAttribute(), removeAttribute()removeStyles()을 사용하여 콘텐츠를 수정합니다. 이 메소드에 대한 호출을 사용하여 변경 이벤트가 발생합니까?


예기치 않은 문제의 원인이 될 수있는 2 가지 문제점 (YUI의 App Framework 사용과 관련이 있음)을 발견했습니다. http://jsfiddle.net/c3tqk/

문제 1 :

재현하려면 첫 번째 단락 ( text)의 1. 부분과 Edit Link 버튼을 클릭합니다. 2. 두 번째 단락 ( link)의 일부를 선택하고 Edit Link 단추를 클릭하십시오. 콘솔을 확인하고 변경 이벤트가 발생했음을 확인하십시오.

문제 2 : 첫 번째 단락에서 ex을 선택하고 Bold 단추를 클릭하십시오. 2. 첫 번째 단락에서 x을 선택 취소하고 선택하고 Bold 버튼을 클릭합니다. 변경 이벤트가 두 번 발생합니다.

답변

5

언제든지 수동으로 이벤트를 실행할 수 있습니다. 보통 권장되지 않습니다.. CKEDITOR.event.fire 사용

element.setAttribute('foo', 'bar'); 
editor.fire('change'); 

더 좋은 아이디어가 필요한 경우, 자동으로 editor#saveSnapshot (즉, 꽤 멋진, 변경 사항이 공식적으로 취소됩니다) 스냅 샷을 취소 생성 이벤트 및 화재 editor#change을 사용하는 것입니다

element.setAttribute('foo', 'bar'); 
editor.fire('saveSnapshot'); 

당신 또한 해고 될 때 기존 이벤트를 방해하고 다른 리스너가 호출되지 않도록합니다. 우선 순위가 낮은 청취자 인 CKEDITOR.event.on을 사용하기 만하면됩니다.

editor.on('change', function(evt) { 
    if (some condition) { 
     evt.stop(); 
     // ...or... 
     evt.cancel(); 
    } 
}, editor, null, -999); // by default listeners have priority=10 

CKEDITOR.eventInfo.stopCKEDITOR.eventInfo.cancel을 참조하십시오. 그들은 약간 다릅니다.

클릭하여 대화 상자를 열고 (올바른 규칙을 만들 때) 이벤트가 시작되는 이유를 얻는 것이 까다로울 수 있지만 가능하다고 느낄 수 있습니다. 나는 그것을 재현 할 수 없었다 (최신 크롬과 FF를 시험해 보았다); change은 명령 (예 : Bold, Link 등)을 입력하거나 실행할 때만 실행되었습니다. 설정에 대한 추가 정보 (버전의 CKEditor 및 브라우저, 편집기 구성대화 상자의 이름)을 제공하면 디버그하는 것이 훨씬 쉬울 것입니다.

+0

jsfiddle을 확인하지 않았지만 YUI가 일부 ID를 요소에 추가한다는 것을 다른 질문에서 기억합니다. 그것은 우스꽝스럽고 매니저를 되 돌리는 것입니다. – Reinmar

+0

흠 ... @ F21이 그녀/그의 의견을 삭제했습니다. – Reinmar