2012-08-08 91 views
5

Codemirror有一個很好的自動完成示例:linkCodemirror遠程自動完成

想法是讓服務器端自動完成(例如自動完成Java的Ajax服務)。有人有一個與codemirror遠程自動完成的例子嗎?

+0

你是什麼意思回調?這都是客戶端。代碼鏡像模式(用於自動完成)都是在瀏覽器中執行的JavaScript程序。 – 2012-08-08 10:00:43

+0

該建議來自Ajax請求(服務器端) – ic3 2012-08-08 10:29:46

回答

0
// javascript code 

var editor; 

function createEditor (data) { 
    editor = CodeMirror.fromTextArea(myTextarea, { 
     mode: "text/x-sql", 
     extraKeys: {"Ctrl-Q": "autocomplete"}, 
     hint: CodeMirror.hint.sql, 
     hintOptions: { 
      tables: data ? data : {} 
     } 
    }) 
} 

(function createEditorWithRemoteData() { 
    $.ajax({ 
     type:'POST', 
     dataType:'json', 
     url:'data.json', 
     success:createEditor, 
     error:function() {} 
    }) 
})(); 

// data.json 

{ 
    "table1": [ "col_A", "col_B", "col_C" ], 
    "table2": [ "other_columns1", "other_columns2" ] 
} 
+0

這意味着一個固定的完成列表 – Svend 2015-06-12 21:23:50

1

我已經能夠得到異步完井與CodeMirror 5.3秀,hint.js工作通過以下(ES6味,所以對於ES3,與var更換let=>function

雖然沒有實際的ajax,但希望能夠明確如何掛接它,只需在您的ajax調用完成處理程序中調用callback即可。

CodeMirror.registerHelper('hint', 'ajax', (mirror, callback) => { 
    let words = ['foo', 'bar', 'baz']; 
    let cur = mirror.getCursor(); 
    let range = mirror.findWordAt(cur); 
    let fragment = mirror.getRange(range.anchor, range.head); 
    callback({ 
     list: words.filter(w => w.indexOf(fragment) === 0), 
     from: range.anchor, 
     to: range.head 
    }); 
}); 
CodeMirror.hint.ajax.async = true; 

CodeMirror.commands.autocomplete = function(mirror) { 
    mirror.showHint({ hint: CodeMirror.hint.ajax }); 
}; 

主要是設置async屬性作爲文檔告訴你:

它可以在提示功能異步屬性設置爲 真,在這種情況下,它會被稱爲與參數(釐米,回調, ?選項),並完成界面只會彈出時 的提示函數調用