2014-12-11 31 views
0

我正在使用Javascript Ace文本編輯器,並且需要將關鍵字加載到(DynHighlightRules)中以突出顯示導入的關鍵字。我有亮點,從靜態的關鍵字在將關鍵字導入到webpy服務器中的ace編輯器熒光筆中(Python)

editor.getSession()。setMode工作(「王牌/模式/ highlightRules」)

,但我需要導入新的規則編輯器之後被渲染。我發現了一個很好的解決方案,它可以在Apache服務器中完美工作,但不在Web.py python服務器中。我相信這是由於模板頁面不在服務器的根目錄。有沒有人在Webpy中部署了Ace編輯器並解決了這個問題?

+0

如果某些東西在Apache服務器中有效,但不在python服務器中,則必須由您設置服務器的方式引起。試着多說一些,否則這個問題是不可能回答的。 – 2014-12-12 06:07:09

+0

python服務器有一個基本的python頁面,它調用了名爲templates的子文件夾中的index.html頁面。因此,位於「模板」中的任何內容都是比正常情況更深的一個目錄,因此所有相對路徑都與它應該的位置不匹配。我不是Web.py的粉絲,但我必須將其用於此項目。我發現並在Apache中工作的示例代碼將調用嵌入在html頁面中,從而導致相對路徑問題。代碼位於http://jsbin.com/ojijeb/445/edit?html,output – 2014-12-16 23:27:16

+0

你可以使用ace.config.set(「basePath」,「some/path」)來改變ace尋找文件的位置 – 2014-12-19 19:03:59

回答

0

好吧,我找到了解決我的問題。這是一種解決方法,而不是我最初解決問題的方式。我的第一次嘗試是在「ace.define」函數中嵌入一個ajax調用,但它不會正確處理它,並且會丟失部分導致錯誤。然後我嘗試動態地導入關鍵字,但無法在python環境中工作。最後,我想只是把所有東西都包裝在ajax調用的成功中,現在它的工作原理是正確的。我猜測,當嵌入到ace函數中時,ajax事件和定義的其他部分之間的時序不同步。

所以簡而言之,就是將整個定義包裝在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; 
       }); 

} 

});