王牌编辑器自动完成上传额外记录



我用角度将ui-ace编辑器添加到我的应用程序中。而不是每次都请求单词,我在应用程序启动期间得到 json 1 次。

json文件的示例:

[
  {
    "Word": "Do {int} + {int}",
    "Meta": "Implemented"
  },
  {
    "Word": "Line3",
    "Meta": "Not-implemented"
  },
  {
    "Word": "Line2",
    "Meta": "Not-implemented"
  },
  {
    "Word": "Line4",
    "Meta": "Not-implemented"
  },
  {
    "Word": "444",
    "Meta": "Not-implemented"
  },
  {
    "Word": "E1",
    "Meta": "Not-implemented"
  },
  {
    "Word": "E2",
    "Meta": "Not-implemented"
  },
  {
    "Word": "E1Try",
    "Meta": "Not-implemented"
  },
  {
    "Word": "E3",
    "Meta": "Not-implemented"
  },
  {
    "Word": "E4444",
    "Meta": "Not-implemented"
  }
]

问题是某些单词在自动完成中列出不止一个,请查看屏幕截图:http://take.ms/N8BFZ 。以下是我加载ace编辑器的方式,其中ctrl.listStepLines是一个包含来自API的json响应的对象:

$scope.aceLoaded = function(_editor){
    // Editor part
    var _session = _editor.getSession();
    var _renderer = _editor.renderer;
    _editor.$blockScrolling = Infinity;
    _editor.setOptions({
        minLines: 10,
        maxLines: 40,
        wrap: true,
        firstLineNumber: 1,
        enableBasicAutocompletion: true,
        enableSnippets: true,
        enableLiveAutocompletion: true
    })
    var langTools = ace.require("ace/ext/language_tools");
    var rhymeCompleter = {
        getCompletions: function (editor, session, pos, prefix, callback) {
            if (prefix.length === 0) { callback(null, []); return }
            callback(null, ctrl.listStepLines.map(function (ea) {
                return { name: ea.Word, value: ea.Word, meta: ea.Meta }
            }));
        }
    }
    langTools.addCompleter(rhymeCompleter);
};

问题是 angularjs 加载了我的函数很多次,而 ace 编辑器有 14 个类似的完成器。我重构了我的代码,并为完成器添加创建了一个单独的函数,该函数仅调用一次。

ctrl.addAutoCompleter();
        function init() {
            ctrl.addAutoCompleter = function () {
                var langTools = ace.require("ace/ext/language_tools");
                var stepLineCompleter = {
                    getCompletions: function (_editor, session, pos, prefix, callback) {
                        if (prefix.length === 0) { callback(null, []); return }
                        callback(null, ctrl.listStepLines.map(function (ea) {
                            return { name: ea.Word, value: ea.Word, meta: ea.Meta }
                        }));
                    }
                }
                langTools.addCompleter(stepLineCompleter);
            }
};

相关内容

  • 没有找到相关文章

最新更新