如何在同一页面上使用不同配置的两个 TinyMCE 编辑器
How can I have two TinyMCE editors on the same page with different configurations
我调试了一整天。
我有一个 ASP.NET MVC 项目和一个 TinyMCE 作为编辑器模板,但基本上问题是只显示了最后一个 TinyMCE。
@Html.TextArea(string.Empty, new { id = textAreaId, value = ViewData.TemplateInfo.FormattedModelValue })
<script type="text/javascript">
tinyMCE.init({
mode: "exact",
elements: "textarea#@textAreaId",
theme: "modern",
inline: true,
plugins: [
"advlist autolink lists link image charmap print preview hr anchor pagebreak",
"searchreplace wordcount visualblocks visualchars code fullscreen",
"insertdatetime media nonbreaking save table contextmenu directionality",
"template paste textcolor colorpicker textpattern imagetools"
],
toolbar1: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
toolbar2: "preview media | forecolor backcolor code | ltr rtl",
image_advtab: true,
templates: [
{ title: 'Test template 1', content: 'Test 1' },
{ title: 'Test template 2', content: 'Test 2' }
],
file_picker_callback: function (callback, value, meta) {
if (meta.filetype === 'image') {
$('#@formId input').click();
}
}
});
</script>
我这样调用 EditorTemplate:
@for (int i = 0; i < Model.Answers.Count; i++)
{
@Html.EditorFor(
model => model.Answers[i].Text,
new
{
htmlAttributes = new { @class = "form-control" },
textAreaId = string.Format("answer-textArea-{0}", i),
formTargetId = string.Format("answer-formTarget-{0}", i),
formId = string.Format("answer-form-{0}", i)
})
}
到目前为止,我一直在尝试不同的模式、不同的选择器,甚至降级到 TinyMCE 3.0 - 没有效果。到目前为止,我在 Internet 上找到的所有解决方案都不适合我。我在控制台中遇到的唯一错误是 Theme 不是构造函数,但由于我在配置中更改为精确模式和元素,甚至过去显示的最后一个编辑器(可能是因为 tinyMCE.init 覆盖了之前的初始化或其他东西)没有显示,错误也是如此。老实说,我不知道如何解决这个问题。感谢任何帮助。
您完全可以拥有多个具有不同配置的编辑器。
由于 init()
调用是在浏览器中进行的,真正的问题是您的 ASP 代码在加载到浏览器中时会变成什么。
首先我不会使用 TinyMCE 3 - 它是一个非常旧的 TinyMCE 版本并且不再获得更新。您的示例似乎使用了 elements
配置选项,这是 TinyMCE 3 的一个选项,但不是 TinyMCE 4,所以这就是为什么它对 TinyMCE 4 根本不起作用的原因 - 您应该 return 使用 selector
选项。
至于 TinyMCE 4 - 您应该使用 selector
配置选项来控制哪个配置对象适用于哪个 <textarea>
:
https://www.tinymce.com/docs/configure/integration-and-setup/#selector
例如:
tinymce.init({
selector: "#area3",
...
});
选择器选项需要一个等同于页面上一个或多个元素的 CSS 选择器的字符串。上面的示例假设页面上的一个 <textarea>
的 ID 为 area3
,因此单个 <textarea>
将被 TinyMCE 替换。
如果您尝试通过 ASP 代码动态创建多个配置,您需要像这样调试代码:
selector: "textarea#@textAreaId"
被评估为发送到浏览器的时间。如果 @textAreaId 被替换为有效 ID,您最终会得到类似
的内容
selector: "textarea#abc123"
...那么如果存在这样的文本区域,TinyMCE 将替换它。我怀疑你的 ASP 代码提供给浏览器的不是你想的那样,所以 TinyMCE 没有被调用。在没有看到这个 运行 的情况下,我们只能向您提供建议。
我调试了一整天。
我有一个 ASP.NET MVC 项目和一个 TinyMCE 作为编辑器模板,但基本上问题是只显示了最后一个 TinyMCE。
@Html.TextArea(string.Empty, new { id = textAreaId, value = ViewData.TemplateInfo.FormattedModelValue })
<script type="text/javascript">
tinyMCE.init({
mode: "exact",
elements: "textarea#@textAreaId",
theme: "modern",
inline: true,
plugins: [
"advlist autolink lists link image charmap print preview hr anchor pagebreak",
"searchreplace wordcount visualblocks visualchars code fullscreen",
"insertdatetime media nonbreaking save table contextmenu directionality",
"template paste textcolor colorpicker textpattern imagetools"
],
toolbar1: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
toolbar2: "preview media | forecolor backcolor code | ltr rtl",
image_advtab: true,
templates: [
{ title: 'Test template 1', content: 'Test 1' },
{ title: 'Test template 2', content: 'Test 2' }
],
file_picker_callback: function (callback, value, meta) {
if (meta.filetype === 'image') {
$('#@formId input').click();
}
}
});
</script>
我这样调用 EditorTemplate:
@for (int i = 0; i < Model.Answers.Count; i++)
{
@Html.EditorFor(
model => model.Answers[i].Text,
new
{
htmlAttributes = new { @class = "form-control" },
textAreaId = string.Format("answer-textArea-{0}", i),
formTargetId = string.Format("answer-formTarget-{0}", i),
formId = string.Format("answer-form-{0}", i)
})
}
到目前为止,我一直在尝试不同的模式、不同的选择器,甚至降级到 TinyMCE 3.0 - 没有效果。到目前为止,我在 Internet 上找到的所有解决方案都不适合我。我在控制台中遇到的唯一错误是 Theme 不是构造函数,但由于我在配置中更改为精确模式和元素,甚至过去显示的最后一个编辑器(可能是因为 tinyMCE.init 覆盖了之前的初始化或其他东西)没有显示,错误也是如此。老实说,我不知道如何解决这个问题。感谢任何帮助。
您完全可以拥有多个具有不同配置的编辑器。
由于 init()
调用是在浏览器中进行的,真正的问题是您的 ASP 代码在加载到浏览器中时会变成什么。
首先我不会使用 TinyMCE 3 - 它是一个非常旧的 TinyMCE 版本并且不再获得更新。您的示例似乎使用了 elements
配置选项,这是 TinyMCE 3 的一个选项,但不是 TinyMCE 4,所以这就是为什么它对 TinyMCE 4 根本不起作用的原因 - 您应该 return 使用 selector
选项。
至于 TinyMCE 4 - 您应该使用 selector
配置选项来控制哪个配置对象适用于哪个 <textarea>
:
https://www.tinymce.com/docs/configure/integration-and-setup/#selector
例如:
tinymce.init({
selector: "#area3",
...
});
选择器选项需要一个等同于页面上一个或多个元素的 CSS 选择器的字符串。上面的示例假设页面上的一个 <textarea>
的 ID 为 area3
,因此单个 <textarea>
将被 TinyMCE 替换。
如果您尝试通过 ASP 代码动态创建多个配置,您需要像这样调试代码:
selector: "textarea#@textAreaId"
被评估为发送到浏览器的时间。如果 @textAreaId 被替换为有效 ID,您最终会得到类似
的内容selector: "textarea#abc123"
...那么如果存在这样的文本区域,TinyMCE 将替换它。我怀疑你的 ASP 代码提供给浏览器的不是你想的那样,所以 TinyMCE 没有被调用。在没有看到这个 运行 的情况下,我们只能向您提供建议。