3

我的 tinyMCE 编辑器中有一个自定义菜单按钮,它使用页面上其他地方的特定 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...的东西?

谢谢!

4

1 回答 1

2

我找到了解决这个问题的方法,但我不确定这是最好的方法。

看起来我不能让 tinyMCE 重新渲染菜单,所以我在 AJAX 调用结束时添加了一些代码:在它更新了 DOM 之后,它手动更新了 tinymce 下拉菜单。

可以使用以下方式访问菜单对象:

tinyMCE.activeEditor.controlManager.get('editor_mybutton_menu')

其中mybutton是我的自定义控件的名称。我的快速而肮脏的解决方案是调用removeAll()此菜单对象(以删除所有当前菜单项),然后重新执行我的选择器代码以在(新)DOM 中找到匹配的元素并将菜单项添加回来基于新状态。

它似乎工作得很好,尽管总是欢迎调整和想法!

于 2013-02-27T13:11:14.360 回答