本文共 4893 字,大约阅读时间需要 16 分钟。
目录
目前编者已知有两种方法:1、修改MIME配置;2、动态修改参数配置。第一种时候设置关键字,比如说where , select。第二种适合动态的表关联结构。
window.onload = function () { var mime = 'text/x-flinksql'; this.editor = CodeMirror.fromTextArea(document.getElementById('code'), { mode: mime, //指向引入的model/sql.js里面的'text/x-flinksql'【defineMime】 indentWithTabs: true, smartIndent: true, styleActiveLine: true, lineNumbers: true, lineWrapping: true, matchBrackets: true, autofocus: true, extraKeys: {"Ctrl-Space": "autocomplete"}, // hintOptions的tables属性里面就是我们具体要提示的内容 hintOptions: { tables: sqlresult.data.filedArr } }); this.editor.on("keyup", function (cm, event) { //所有的字母和'$','{','.'在键按下之后都将触发自动完成 if (!cm.state.completionActive && ((event.keyCode >= 65 && event.keyCode <= 90 ) || event.keyCode == 52 || event.keyCode == 219 || event.keyCode == 190)) { CodeMirror.commands.autocomplete(cm, null, {completeSingle: false}); } }); };
按需引入
sql文件夹里面的sql.js
//flinksql CodeMirror.defineMIME("text/x-flinksql", { name: "sql", client: set("source"), keywords: set("for null true false TUMBLE_ROWTIME MINUTE HOUR INTERVAL select from table with group by order and or DATE_FORMAT TIMESTAMP FROM_TIMESTAMP FUNCTION VIEW INSERT INTO WHERE JOIN HAVING DISTINCT ALL SUM UNION ALL PARTITION OVER AS DESC ASC COUNT SUBSTRING type project"), builtin: set("VARCHAR INT BIGINT DOUBLE DATE BOOLEAN TINYINT SAMLLINT FLOAT DECIMAL VARBINARY"), atoms: set("false true null"), operatorChars: /^[*+\-%<>!=&|^\/#@?~]/, dateSQL: set("time"), support: set("decimallessFloat zerolessFloat binaryNumber hexNumber") });});
window.onload = function () { var mime = 'text/x-flinksql'; this.editor = CodeMirror.fromTextArea(document.getElementById('code'), { mode: mime, indentWithTabs: true, smartIndent: true, styleActiveLine: true, lineNumbers: true, lineWrapping: true, matchBrackets: true, autofocus: true, extraKeys: {"Ctrl": "autocomplete"}, // hintOptions的tables属性里面就是我们具体要提示的内容:key是表名称,value是字段 hintOptions: { completeSingle: false, tables: { csdn: ['cbry', 'like', 'follow'], blogChina: [], com: ['alibaba','uu','ireader'] } } }); this.editor.on("keyup", function (cm, event) { //所有的字母和'$','{','.'在键按下之后都将触发自动完成 if (!cm.state.completionActive && ((event.keyCode >= 65 && event.keyCode <= 90 ) || event.keyCode == 52 || event.keyCode == 219 || event.keyCode == 190)) { CodeMirror.commands.autocomplete(cm, null, {completeSingle: false}); } }); };
属性设置无法直接识别变量,即动态数据表关联。
hintOptions里面的tables中,是否加""不要影响设置:
"csdn": ['cbry', 'like', 'follow'] 等价于 csdn: ['cbry', 'like', 'follow']
因素tables里面的参数是一个对象。
直接赋予var新的对象,利用JS的对象操作进行动态赋值:
var sqlresult = {"data": {"csdn": ['cbry', 'like', 'follow'],"blogChina": [],"com": ['alibaba','uu','ireader']}};
利用这个也可以给codeMirror引入动态数据:tables[testStr] = testStrParams
2021.04.22
var mime = 'text/x-flinksql'; var testStr = "Cbry_1"; var testStrParams = ['csdn','leetcode','']; var test={}; test[testStr] = testStrParams alert(JSON.stringify(test)) this.editor = CodeMirror.fromTextArea(document.getElementById('sqlEditor'), { mode: mime, indentWithTabs: true, smartIndent: true, styleActiveLine: true, lineNumbers: true, lineWrapping: true, matchBrackets: true, autofocus: true, extraKeys: {"Ctrl": "autocomplete"}, // hintOptions的tables属性里面就是我们具体要提示的内容:key是表名称,value是字段 hintOptions: { completeSingle: false, tables:test } }); this.editor.on("keyup", function (cm, event) { //所有的字母和'$','{','.'在键按下之后都将触发自动完成 if (!cm.state.completionActive && ((event.keyCode >= 65 && event.keyCode <= 90 ) || event.keyCode == 52 || event.keyCode == 219 || event.keyCode == 190)) { CodeMirror.commands.autocomplete(cm, null, {completeSingle: false}); } });