我的tinyMCE编辑器中有一个自定义menubutton,它使用页面上其他位置的特定HTML元素作为菜单项。我使用jQuery选择器来获取元素列表,然后将每个元素添加为一个菜单项:
c.onRenderMenu.add(function(c,m) {
m.add({ title: 'Pick One:', 'class': 'mceMenuItemTitle' }).setDisabled(1);
$('span[data-menuitem]').each(function() {
var val = $(this).html();
m.add({
title: $(this).attr("data-menuitem"),
onclick: function () { tinyMCE.activeEditor.execCommand('mceInsertContent', false, val) }
});
});
});
我的问题是,只有在首次单击按钮并首次呈现菜单时才会发生这种情况。当前页面上的HTML元素会根据用户点击和一些AJAX偶尔更改,因此每次呈现菜单时都需要运行此选择器代码以确保菜单完全是最新的。这可能吗?
如果失败了,是否可以从页面中其他地方的AJAX调用结束时动态更新控件?我不知道如何访问菜单项并更新它。使用tinyMCE.activeEditor.controlManager
...?
谢谢!
答案 0 :(得分:2)
我找到了解决这个问题的方法,但我不确定这是最好的路径。
看起来我不能让tinyMCE重新渲染菜单,所以我在AJAX调用结束时添加了一些代码:在更新DOM后,它会手动更新tinymce drop菜单。
可以使用以下方式访问菜单对象:
tinyMCE.activeEditor.controlManager.get('editor_mybutton_menu')
其中 mybutton 是我的自定义控件的名称。我的快速和肮脏的解决方案是在此菜单对象上调用removeAll()
(以删除所有当前菜单项),然后重新执行我的选择器代码以查找(新)DOM中的匹配元素根据新状态添加菜单项。
似乎工作得很好,虽然调整和放大我们随时欢迎您的想法!