2014-12-11 4 views
0

자바 스크립트 Ace 텍스트 편집기를 사용 중이며 가져온 키워드를 강조 표시하기 위해 키워드를 (DynHighlightRules)에로드해야합니다. 나는 ("에이스/모드/highlightRules")웹 서버 (파이썬)에서 에이스 편집기 하이 라이터로 키워드 가져 오기

editor.getSession(). setMode 정적 키워드에서 작업 하이라이트를 가지고 있지만 에디터가 렌더링 된 후 나는 새로운 규칙을 가져올 필요 . 아파치 서버에서 완벽하게 작동하지만 Web.py python 서버에서는 작동하지 않는 멋진 솔루션을 발견했습니다. 나는 이것이 템플릿 페이지가 서버의 루트 레벨에 있지 않기 때문이라고 생각한다. 누구든지 Webpy에서 Ace 편집기를 배포하고이 문제를 해결 했습니까?

+0

Apache 서버에서는 작동하지만 Python 서버에서는 작동하지 않는 경우 서버 설정 방법으로 인해 발생해야합니다. 더 많은 것을 말하라. 그렇지 않으면이 질문은 대답 할 수 없다. –

+0

python 서버에는 templates라는 하위 폴더에서 index.html 페이지를 호출하는 기본 파이썬 페이지가 있습니다. 결과적으로 "템플리트"에있는 모든 항목은 정상적인 상황보다 하나의 디렉토리에 있으므로 모든 상대 경로가 필요한 위치와 일치하지 않습니다. 나는 Web.py의 팬이 아니지만이 프로젝트를 위해 사용해야한다. 발견하고 아파치에서 작동하는 샘플 코드는 html 페이지에 임베드 된 호출을 가지므로 상대 경로 지정 문제가 발생합니다. 코드는 http://jsbin.com/ojijeb/445/edit?html,output –

+0

에 있습니다. ace.config.set ("basePath", "some/path")를 사용하여 파일을 찾는 위치를 변경할 수 있습니다 –

답변

0

좋아, 내 문제에 대한 해결책을 찾았습니다. 이 문제를 해결하기 위해 원래 의도했던 방식이 아닌 해결 방법입니다. 내 첫 번째 시도는 "ace.define"함수에 ajax 호출을 포함시키는 것이지만 올바르게 처리하지 못하고 부품이 누락되어 오류가 발생합니다. 그렇다면 동적으로 키워드를 가져 오려고했지만 파이썬 환경에서 그 일을 할 수 없었습니다. 마지막으로 나는 아약스 호출의 성공에 모든 것을 담은 것으로 생각했으며 이제는 올바르게 작동합니다. 나는 ace 함수에 임베드 될 때 ajax 이벤트와 정의의 다른 부분 사이의 타이밍이 일치하지 않았다고 생각합니다.

간단히 대답하면 아약스 성공 콜백에서 전체 정의를 래핑하는 것입니다.

$.ajax({ 
      url: "/readUserCreatedKeywords", 
      type: "POST", 
      success: function(response){ 
       var keywordsString = ""; 
       var tmpArr = response.split(","); 
       var tmpArrLen = tmpArr.length; 
       var s = 0; 
       var halfNum = 0; 
       while (s < tmpArrLen) { // Clean array and save keywords and args into respective arrays 
        halfNum = parseInt(s/2); 
        tmpArr[s] = tmpArr[s].replace("u'", "").replace("[", "").replace("'", "").replace("(u", "").replace(")", "").replace("]", "").replace("(", "").replace(" ", ""); 

        if (s % 2 == 0){ //Store even values in keywords 
         keywordsString += tmpArr[s] + "|"; 
         //console.log("tmpArr[" + s + "]" + tmpArr[s]); 
        } 
        s++; 
       } 

       ace.define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { 
       ...............................................lots of code.......................................... 

       exports.Mode = Mode; 
       }); 

} 

});