我有一个页面上有2个标签(使用bootstrap' s .tab-nav
)。在一个选项卡中,在更新面板中,我有一个CKEditor 4.x实例。在另一个选项卡中,我有一个按钮,通过HttpResponse推送CSV文件(启动下载)。此下载按钮会触发完整的回发,因为部分回发无法推送流进行下载。
问题是,在我开始下载后,当我切换回带有CKEditor实例的选项卡时,它就消失了。
任何想法如何解决?我怀疑这与我从服务器上攻击HttpResponse以提供下载的事实直接相关,但为什么CKE实例会消失?
答案 0 :(得分:0)
以下是我修复它的方法:每当有人打开带有ckeditor的标签时,我都会使用cke的js API来恢复它。
<强> HTML 强>
<ul class="nav nav-tabs" role="tablist">
<li class="active"><a href="#tab1" role="tab" data-toggle="tab">Tab 1</a></li>
<li><a href="#tab2" role="tab" data-toggle="tab">Tab 2</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab1">
...
</div>
<div class="tab-pane" id="tab2">
<textarea class="ckeditor" id="ckeditor1" />
...
</div>
</div>
<强> JS 强>
// Every time someone opens the ckeditor-containing tab, replace the CKEditor if it is missing
$("a[href='#tab2']").on("shown.bs.tab", function (e) {
if (CKEDITOR.instances.ckeditor1 == null) {
// Decode the textarea content
var t = $("#ckeditor1");
t.val(CKEDITOR.tools.htmlDecode(t.val()));
// Show the ckeditor instance
CKEDITOR.replace("ckeditor1", { toolbar: 'CustomToolBar' });
}
});
仅使用CKEDITOR.replace
无效,因为内容在存储到缓存时会被编码。我不得不从4.0.2升级cke,以便在恢复实例时使用CKEDITOR.tools.htmlDecode
解码内容。