AJAX FCKEditor Rich Editor 통합 편 1/2 페이지

(http://www.fckeditor.net자바 아이 편집기 도 FCKEditor 를 사용 합 니 다.XX 의 견 해 는 비슷 합 니까?ㅎ ㅎ),오픈 소스(무료,소스 코드 를 직접 바 꿀 수 있 습 니 다.ㅎ ㅎ),기능 이 강하 고(거의 office word 의 웹 버 전),각종 서버 엔 드 에 대한 지원 을 제공 합 니 다(순 클 라 이언 트 의 동쪽 이지 만,현 재 는.NET,PHP,자바,Coldfusion,Perl,Lasso,Python 각종 서버 엔 드 스 크 립 트 와 긴밀 하 게 통합 되 어 있 습 니 다).국제 화 지원(한 화 는 아주 잘 만 들 었 습 니 다),피부 교체 가능(office 2000 스타일 은 정말 어 지 러 울 수 있 습 니 다),내장 파일 업로드(자바 버 전 은 이것 을 지원 합 니 다),일정한 업데이트 상태 유지(현재 버 전 은 2.3.2)등 이 있 습 니 다.물론 N 다기 능 도 있 지만 저 는 아직 자세히 연구 하지 않 았 습 니 다.만약 에 어떤 분 이 사용 하 시 는 지 알려 드릴 수 있 습 니 다.FCKEditor 의 여러 가지 용법 에 대해 저 는 여기 서 일일이 열거 하지 않 겠 습 니 다.인터넷 에 관련 된 글 이 많 고 괜 찮 은 sample 도 가지 고 있어 서 우리 자신의 프로젝트 에 쉽게 가입 할 수 있 습 니 다.그러나 Ajax 응용 프로그램 에서 FCKEditor 컨트롤 을 어떻게 사용 합 니까?이 FCKEditor 는 해당 하 는 답 을 제공 하지 않 은 것 같 습 니 다.Ajax 는 모두 새로 고침 없 이 제출 되 기 때문에 FCKEditor 는 Form 제출 방식 에서 만 사용 할 수 있 습 니 다.왜 이렇게 말 합 니까?FCKEditor 의 실행 절차 부터 말 해 야 합 니 다.FCKEditor 의 편집 기 는 실제 IFrame 입 니 다.FCKEditor 실 체 를 만 들 때마다 IFrame 을 새로 만 들 고 각종 toolbar 와 편집 구역 을 이 IFrame 에 넣 습 니 다.IFrame 밖 에 해당 하 는 input 요소 가 있어 야 합 니 다.이렇게 하면 textarea 에 있 는 기 존 내용 을 편집기 에 가 져 오 거나 편 집 된 내용 을 LinkedField 에 업데이트 할 수 있 습 니 다.그럼 FCKEditor 의 내용 은 해당 링크 드 필드 에 언제 저 장 됩 니까?처음에 나 는 소스 코드 를 보지 않 았 다.FCKEditor 의 내용 이 바 뀌 었 을 때 LinkedField 를 동시에 업데이트 한 줄 알 았 는데,나중에 아니 라 는 것 을 알 게 되 었 다.만약 그렇다면 우 리 는 ajax 에서 FCKEditor 를 쉽게 사용 할 수 있 을 것 이다.그럼 언제 쯤 링크 드 필드 와 동기 화 되 었 을 까?답 은 form 에서 submit 이 벤트 를 실행 하기 전에 submit 전에 업 데 이 트 를 하 는 유일한 방법 은 attachEvent 방식 으로 업 데 이 트 된 리 셋 함 수 를 onsubmit 이벤트 에 연결 한 다음 에 일정한 방식 으로 submit 전에 바 인 딩 함 수 를 호출 하 는 것 입 니 다.그래서 FCKEditor 가 제공 하 는 핵심 js 파일 에서 onsubmit 를 찾 았 고 나중에 fckeditorcodei.js 파일 은 onsubmit 키 워드 를 찾 았 습 니 다.토혈 은 MyEclipse 의 document format 기능 을 사용 하여 포맷 처 리 를 하 는 것 을 추천 합 니 다.그러면 기본적으로 안의 구 조 를 한눈 에 알 수 있 습 니 다)관련 코드 는 다음 과 같 습 니 다.먼저 FCKEditor 초기 화 시:

function FCK_EditingArea_OnLoad() {
FCK.EditorWindow = FCK.EditingArea.Window;
FCK.EditorDocument = FCK.EditingArea.Document;
FCK.InitializeBehaviors();
FCK.OnAfterSetHTML();
if (FCK.Status != FCK_STATUS_NOTLOADED) {
return;
}
FCK.ResetIsDirty();
FCKTools.AttachToLinkedFieldFormSubmit(FCK.UpdateLinkedField); //
FCK.SetStatus(FCK_STATUS_ACTIVE);
}
그 다음 submit 제출 전 처리:

FCKTools.AttachToLinkedFieldFormSubmit = function (A) {
var B = FCK.LinkedField.form;
if (!B) {
return;
}
if (FCKBrowserInfo.IsIE) {
B.attachEvent("onsubmit", A); // form onsubmit
} else {
B.addEventListener("submit", A, false);
}
if (!B.updateFCKeditor) {
B.updateFCKeditor = new Array();
}
B.updateFCKeditor[B.updateFCKeditor.length] = A;
if (!B.originalSubmit && (typeof (B.submit) == "function" || (!B.submit.tagName && !B.submit.length))) {
B.originalSubmit = B.submit;
B.submit = FCKTools_SubmitReplacer;
}
};
1 2 다음 페이지 전문 을 읽다

좋은 웹페이지 즐겨찾기