带有 TinyMCE 文本区域的 Ace 编辑器
Ace Editor with TinyMCE textarea
我正在尝试在我的应用程序中扩展 "code view" 和 "design view"。我可以毫无问题地使用代码视图 (Ace Editor) 或设计视图 (tinymce)。但是我希望两者一起工作并在开发时更新任何一方的代码。这将使我只需要 POST 一个标签而不是两个,并且可能会在未来遇到问题。
我创建这个 fiddle 是为了说明我遇到了什么问题。
在我的 fiddle 中,我展示了一个 tinymce 文本区域、一个常规文本区域和一个 ace 编辑器文本区域。 tinymce 和常规 textarea 共享相同的名称,Ace 编辑器会在我输入时调用它进行更新。您可以看到常规文本区域工作正常,但是 tinymce 文本区域不是。
我认为问题可能出在 TinyMCE 正在使用 iFrame
并在幕后更新文本区域,但我不确定在 [=23= 中调用该 iframe 的最佳方式].
我尝试同步两者,但由于在 tinyMCE 上缺少一些 callbacks/events,这是我得到的最好的。 ACE 中的内容仅在 tinyMCE 上模糊后更新。目前没有直接输入事件:
代码:
var editor = ace.edit("edit");
var textarea = $('textarea[name="test"]');
editor.getSession().setValue(textarea.val());
editor.getSession().on('change', function(){
textarea.val(editor.getSession().getValue());
// copy ace to tinyMCE
tinymce.get('test').setContent(editor.getSession().getValue());
});
editor.setTheme("https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.2/theme-terminal.js");
editor.getSession().setMode("https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.2/mode-html.js");
tinymce.init({
selector: ".test",
relative_urls: false,
apply_source_formatting : true,
setup : function(ed) {
ed.on('change', function(e) {
// copy tinyMCE to textarea
textarea.val(tinymce.activeEditor.getContent({format : 'raw'}));
// copy tinyMCE to ace
editor.getSession().setValue(
tinymce.activeEditor.getContent({format : 'raw'})
);
});
}
});
您应该这样设置 ACE 主题和模式:
editor.setTheme("ace/theme/terminal");
editor.getSession().setMode("ace/mode/html");
我正在尝试在我的应用程序中扩展 "code view" 和 "design view"。我可以毫无问题地使用代码视图 (Ace Editor) 或设计视图 (tinymce)。但是我希望两者一起工作并在开发时更新任何一方的代码。这将使我只需要 POST 一个标签而不是两个,并且可能会在未来遇到问题。
我创建这个 fiddle 是为了说明我遇到了什么问题。
在我的 fiddle 中,我展示了一个 tinymce 文本区域、一个常规文本区域和一个 ace 编辑器文本区域。 tinymce 和常规 textarea 共享相同的名称,Ace 编辑器会在我输入时调用它进行更新。您可以看到常规文本区域工作正常,但是 tinymce 文本区域不是。
我认为问题可能出在 TinyMCE 正在使用 iFrame
并在幕后更新文本区域,但我不确定在 [=23= 中调用该 iframe 的最佳方式].
我尝试同步两者,但由于在 tinyMCE 上缺少一些 callbacks/events,这是我得到的最好的。 ACE 中的内容仅在 tinyMCE 上模糊后更新。目前没有直接输入事件:
代码:
var editor = ace.edit("edit");
var textarea = $('textarea[name="test"]');
editor.getSession().setValue(textarea.val());
editor.getSession().on('change', function(){
textarea.val(editor.getSession().getValue());
// copy ace to tinyMCE
tinymce.get('test').setContent(editor.getSession().getValue());
});
editor.setTheme("https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.2/theme-terminal.js");
editor.getSession().setMode("https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.2/mode-html.js");
tinymce.init({
selector: ".test",
relative_urls: false,
apply_source_formatting : true,
setup : function(ed) {
ed.on('change', function(e) {
// copy tinyMCE to textarea
textarea.val(tinymce.activeEditor.getContent({format : 'raw'}));
// copy tinyMCE to ace
editor.getSession().setValue(
tinymce.activeEditor.getContent({format : 'raw'})
);
});
}
});
您应该这样设置 ACE 主题和模式:
editor.setTheme("ace/theme/terminal");
editor.getSession().setMode("ace/mode/html");