【发布时间】:2011-07-06 16:14:01
【问题描述】:
我在 ajax 场景中使用 ckeditor 和 jQuery 适配器。 ckeditor 使用 jQuery 绑定到 textarea 元素。
应用程序:
我正在为客户设计一个电子学习应用程序。每门课程都有许多步骤,从数据库表中提取。
应用程序的 UI 只是一个带有“上一个”和“下一个”按钮的表单,用于浏览课程。
问题在于管理设施,导师可以在其中创建和更新每门课程的步骤。
同样,管理工具只是一个带有上一个和下一个按钮的表单。但是,有一个名为 StepText 的字段我想要 html 而不是纯文本。因此需要富文本编辑器。
通过 Ajax 调用从一步到一步的滚动是向下的,它转到控制器,获取下一个(或上一个)步骤的数据,并将其注入页面。 ajax 调用返回从局部视图创建的 html。
问题:
textarea 在这个局部视图中。 CKEditor 在页面第一次加载时正确绑定,但对于任何后续的 ajax 响应都没有。
结果是 ckEditor 并没有完全显示出来,我只是得到了 textarea 不吸引人的裸露。
任何想法为什么会发生这种情况?
设置(显示为参考)(已编辑):
使用以下脚本:
<script type="text/javascript" src="@Url.Content("~/ckeditor/ckeditor.js")"></script>
<script type="text/javascript" src="@Url.Content("~/ckeditor/adapters/jquery.js")"></script>
这让我可以将 ckEditor 与 jQuery 一起使用,如下所示:
$(document).ready(function () {
$('#StepText').ckeditor(function () { }, { toolbar: 'Basic' });
});
文本区域位于部分 .cshtml 文件中,位于作为 ajax 调用目标的 div 中:
已编辑!!显示如何进行 ajax 调用!
<div id="ajaxEditor">
@using (Ajax.BeginForm(MVC.Admin.StepEditor.Edit(), new AjaxOptions { UpdateTargetId = "ajaxEditor", HttpMethod = "POST" },
new { @name = "EditStepForm", @id = "EditStepForm" }))
{
<div class="editor-label">
@Html.LabelFor(model => model.StepText)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.StepText, 20, 68, null)
@Html.ValidationMessageFor(model => model.StepText)
</div>
}
</div>
回复 Chris Marisic:
我尝试在 ajax 调用的 OnSuccess 中重新绑定 ckeditor,但是在 Chrome 中调试 jQuery 时,出现以下错误:
Uncaught [CKEDITOR.editor] The instance "myTextArea" already exists.
这是您所期望的:控件名称仍然相同,并且还没有完整的页面刷新。
【问题讨论】:
-
请提供更多代码(即“ajax 调用覆盖”是什么意思)。并提供 ckeditor 的 jQuery 适配器的链接(或者它是标准 ckeditor 版本的内置?)。
-
不,它不是内置的。如果你想在 jQuery 中使用 ckEditor,你必须在 ckeditor.js 文件之后包含适配器文件,如上面的编辑版本所示。
-
是不是像调用你在document.ready上运行的代码一样简单,在ajax之后运行?
-
会发生什么? CKEditor 是回滚到文本区域还是只是丢失了一些 UI 元素?
-
好的,ajax 调用会覆盖页面,放回相同的元素和 ids 但不同的数据。在 textarea 上,我有 CKeditor 实例,现在我只有光秃秃的、裸露的 textarea。该应用程序本质上是一个表单,它通过 ajax 从数据库中加载连续记录。鉴于这些 cmets 反映了混乱,将更新问题。
标签: jquery asp.net-mvc-3 ckeditor