我想知道这是否是这个代码的更好替代品,以使它看起来不那么hacky:
active_tiny_editor = setInterval(function () {
if(tinyMCE.activeEditor!==null){
my_object.switch_tabs('tmce');
clearInterval(active_tiny_editor);
}
}, 200);
理想情况下,问题是在页面重新加载后,Wordpress可视化编辑器消失了。我需要切换回文本模式并再次切换到可视化编辑器以查看内容..
看起来在第一次加载后页面上没有正确初始化某些内容,并且在切换编辑模式时它会得到修复。
如果您有任何想法,请告诉我。感谢。
更新
这是代码:
// select active editor tab
switch(bootstrap_config_object.editor_active_tab)
{
case 0:
bootstrap_object.switch_tabs('html');
break;
case 1:
if(bootstrap_config_object.tmce_editor_status==1){
active_tiny_editor = setInterval(function () {
if(tinyMCE.activeEditor!==null){
bootstrap_object.switch_tabs('tmce');
clearInterval(active_tiny_editor);
}
}, 200);
}else{
bootstrap_object.switch_tabs('html');
}
break;
case 2:
bootstrap_object.switch_tabs('syntax');
myCodeMirror.refresh();
break;
}
然后这是包含切换标签逻辑的bootstrap_object:
switch_tabs: function(do_active) {// switch active tabs
switch(do_active)
{
case 'html':
jQuery('#content-html').addClass('switch-html');
jQuery('#content-bootstrap').removeClass('switch-bootstrap');
jQuery('#wrap-code-bootstrap, #codemirror-insert-media').addClass('element-hide');
jQuery('#content, #ed_toolbar, .insert-media, #content-resize-handle').removeClass('element-hide');
jQuery('#wp-content-wrap').addClass('html-active').removeClass('syntax-active').removeClass('tmce-active');
jQuery('#content').show();
jQuery('#content_parent, .CodeMirror').hide();
if(bootstrap_config_object.codemirror_status==1){
bootstrap_object.replase_shortcode_add_method('normal');
}
break;
case 'tmce':
active_tiny_editor = setInterval(function () {
if(tinyMCE.activeEditor!==null){
jQuery('#content_parent').show();
clearInterval(active_tiny_editor);
}
}, 200);
jQuery('#content-tmce').addClass('switch-tmce');
jQuery('#content-bootstrap').removeClass('switch-bootstrap');
jQuery('#wrap-code-bootstrap, #content, #ed_toolbar, #codemirror-insert-media').addClass('element-hide');
jQuery('#content_parent, .insert-media, #content-resize-handle').removeClass('element-hide');
jQuery('#wp-content-wrap').addClass('tmce-active').removeClass('syntax-active').removeClass('html-active');
jQuery('#content_parent').show();
jQuery('.CodeMirror, #content').hide();
if(bootstrap_config_object.codemirror_status==1){
bootstrap_object.replase_shortcode_add_method('normal');
}
break;
case 'syntax':
jQuery('#content-bootstrap').addClass('switch-bootstrap');
jQuery('.wp-switch-editor').removeClass('switch-tmce switch-html');
jQuery('#content_parent, #content, #ed_toolbar, .insert-media, #content-resize-handle').addClass('element-hide');
jQuery('#wrap-code-bootstrap, #codemirror-insert-media').removeClass('element-hide');
jQuery('#wp-content-wrap').addClass('syntax-active').removeClass('tmce-active').removeClass('html-active');
jQuery('.CodeMirror').show();
jQuery('#content_parent, #content').hide();
// resize codemirror
wp_settings = bootstrap_object.URLToArray(jQuery.cookie("wp-settings-"+bootstrap_config_object.user_id));
if(wp_settings){
jQuery('.CodeMirror').css('height', parseInt(wp_settings['ed_size'])+30+'px');
}
tinyMCE.execCommand('mceRemoveControl', false, 'content');
if(bootstrap_config_object.codemirror_status==1){
bootstrap_object.replase_shortcode_add_method('syntax');
}
break;
}
// set active tab
jQuery('#editor-active-tab').val(do_active);
功能:
我在WP编辑器中有三个编辑选项卡,WP中的传统Visual和Text编辑器。然后我添加一个名为“Syntax”的新窗口,它将转换编辑器以使用Code Mirror显示语法HTML。在使用它和添加短代码等时,我需要它们保持一致和稳定。
答案 0 :(得分:0)
看起来更好? :
function checknSwitch() {
if(tinyMCE.activeEditor!==null) my_object.switch_tabs('tmce');
}
setTimeout(checknSwitch, 200);
答案 1 :(得分:0)
tinyMCE.activeEditor
被设置。这里的问题是页面重新加载只会删除html节点而不会删除编辑器本身。
在初始化具有相同id的编辑器之前,首先需要正确关闭该tinymce实例。请参阅此SO主题:How to destroy tinyMce?
顺便说一下。如果可能,最好使用tinymce.get('your_editor_id')
而不是tinyMCE.activeEditor
。 tinymce.get('your_editor_id')
始终设置/可用,以防初始化。
根本不需要setInterval
。