【问题标题】:tinymce.WPWindowManager is deprecated. How to use the default editor.windowManager instead in TinyMCE 4 and WordPress 3.9?tinymce.WPWindowManager 已弃用。如何在 TinyMCE 4 和 WordPress 3.9 中使用默认的 editor.windowManager?
【发布时间】:2014-06-25 06:11:20
【问题描述】:

我有一个 TinyMCE 插件,它使用以下代码打开一个弹出窗口:

editor.windowManager.open({
    id : 'popin-div-id',
    width : 500,
    height : "auto",
    wpDialog : true,
    title : 'Edit Options'
});

自从我更新到 WordPress 3.9(嵌入了 TinyMCE 4)后,我在控制台中收到以下错误:

tinymce.WPWindowManager is deprecated. Use the default editor.windowManager to open dialogs with inline HTML. 

如果我从上面的代码中删除“wpDialog : true”部分,我的 popin 将不再出现(没有错误)。

要在 TinyMCE 4 中使用默认的 windowManager,我需要进行哪些更改?我检查了他们的网站,但找不到有关从 div 中打开 popin 的文档,但只能从外部 HTML 页面中找到,请参阅:

【问题讨论】:

    标签: wordpress tinymce tinymce-4 wordpress-3.9


    【解决方案1】:

    我遇到了同样的问题。 TinyMCE 文档没有帮助,WordPress 文档也是如此。我必须深入研究 TinyMCE 代码,才能弄清楚如何让我的简单自定义弹出窗口再次工作。

    回答

    使用html 键在传递给windowManager.open 的对象中定义您的html。下面,我使用 jQuery 来选择一些我通过挂钩到 WordPress after_wp_tiny_mce 操作放置在页面上的 html。

    tinymce.activeEditor.windowManager.open({
        title: ed.getLang('mm_tiny_mce.element_attributes'),
        width : 300,
        height : 300,
        html :
            '<div id="mm-attrs-pop" class="mm-tinymce-popup" tabindex="-1">' +
                jQuery('#mm-attrs-pop-tpl').html() +
            '</div>',
        buttons: [
            {
                text: 'Cancel',
                onclick: 'close'
            },
            {
                text: 'Set Attributes',
                onclick: function(){
                    //some code here that modifies the selected node in TinyMCE
                    tinymce.activeEditor.windowManager.close();
                }
            }
        ]
    });
    

    相关的 TinyMCE 代码在 classes/ui/Window.js 中,特别是 renderHTML 属性。 https://github.com/tinymce/tinymce/blob/master/js/tinymce/classes/ui/Window.js

    希望对您有所帮助。干杯,克里斯

    【讨论】:

    • 感谢@Chris 的回答!真的没有办法直接把popin div的ID传给TinyMCE吗?我问这个是因为使用jQuery('#mm-attrs-pop-tpl').html() 似乎会影响性能,而且我的popin 中有其他ID,所以它们会在DOM 中重复吗?我的 popin 中显示的元素也附加了自定义事件,我需要在重复的 div 中重新实例化它们吗?
    • 我再次查看了 TinyMCE 代码,在我看来,v4.x 中没有任何类似于用于 v3.x 的 id 键的内容。我明白你关于复制 DOM id 的观点——即你的模板中有其他 id'ed 子元素。解决此问题的最佳方法是将您的子元素 ID 转换为类:即 $('#uniqueChild') 变为 $('#popup .uniqueChild')。一种更简单但不太可靠的方法是在 TinyMCE 代码中将 HTML 作为 JavaScript 字符串传递:html: '&lt;div id="#popup"&gt;&lt;div id="#uniqueChild"&gt;&lt;/div&gt;&lt;/div&gt;
    • 我赞成你的回答,但我会等到赏金结束后再接受,也许有人可以提出更好的解决方案,否则你会得到赏金,干杯! ;)
    • 看起来我昨天得到了 50 -- 25 和今天 25。不确定。这是我第一次“赢得”任何东西。谢谢,干杯,克里斯
    • 不,我认为您从 3 个赞成票中获得了前 25 个,而从赏金中获得了另外 25 个......真是个骗局
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多