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 に答える