gpt4 book ai didi

javascript - 如何将 CodeMirror 集成到 KnockoutJS 中?

转载 作者:数据小太阳 更新时间:2023-10-29 04:07:20 25 4
gpt4 key购买 nike

我想整合 CodeMirror JavaScript 编辑器到 KnockoutJS。我知道还有 Ace,但在我看来,使用 CodeMirror 会更容易。

我已经为 JQueryUI 小部件和 QTip 集成了自定义绑定(bind),但这些是我在 Internet 上找到的代码片段,然后我只需要修改非常小的部分。

不幸的是,我似乎已经达到了 Javascript 的极限,所以我在这里求助于 JavaScript Sith Masters。我不一定想要为我写的整件事,关于如何继续的指示和建议会有很大帮助。

我的这段代码:

HTML(我删除了文本区域中已有的自定义绑定(bind),它们在这里无关紧要)

<body>
<textarea id="code" cols="60" rows="8"
data-bind="value: condition,
tooltip: 'Enter the conditions',
codemirror: { 'lineNumbers': true, 'matchBrackets': true, 'mode': 'text/typescript' }"></textarea>
</body>

我的 CodeMirror 自定义绑定(bind)处理程序的开始:

ko.bindingHandlers.codemirror = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var options = valueAccessor() || {};
var editor = CodeMirror.fromTextArea($(element)[0], options);
}
};

目前,这不会产生 JS 错误,但会显示 2 个文本区域而不是一个。

那么接下来我该做什么呢?

最佳答案

之前发布的解决方案似乎有点过时并且对我不起作用,所以我以有效的形式重写了它们:

// Example view model with observable.
var viewModel = {
fileContent: ko.observable(''),
options: {
mode: "markdown",
lineNumbers: true
}
};

// Knockout codemirror binding handler
ko.bindingHandlers.codemirror = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {

var options = viewModel.options || {};
options.value = ko.unwrap(valueAccessor());
var editor = CodeMirror(element, options);

editor.on('change', function(cm) {
var value = valueAccessor();
value(cm.getValue());
});

element.editor = editor;
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var observedValue = ko.unwrap(valueAccessor());
if (element.editor) {
element.editor.setValue(observedValue);
element.editor.refresh();
}
}
};

ko.applyBindings(viewModel);

<div data-bind="codemirror:fileContent"></div>作为附加到此的代码镜像的目标将创建一个新的代码镜像实例并从 View 模型中传入选项(如果已设置)。

[edit] 我已经修改了 codemirror 绑定(bind)处理程序的更新方法以打开传递的 valueAccessor,如果没有该行,则在更新 observable 时不会触发更新方法 - 它现在可以作为你会期望它。

关于javascript - 如何将 CodeMirror 集成到 KnockoutJS 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13375612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com