2

編集:フィドルの例を追加しました - http://fiddle.tinymce.com/EZbaab/2

現在、tinyMCE インスタンスを含むページと、それを継承する 3 つの個別のテキストエリアがあります。

クリック可能なサブメニュー項目 (Django を使用して生成) を持つカスタム メニューがあり、クリックすると、現在アクティブな tinyMCE エディター (テキストエリア) にコンテンツが挿入されます。問題は、どのエディター ツールバーがクリックされたかに関係なく、これが発生することです。たとえば、上部のエディターのツールバー項目をクリックしても、下部のエディターにフォーカスがある場合、テキストは下部のエディターに貼り付けられます。

メニュー項目がクリックされたときに、ツールバーがクリックされているエディターを強制的にフォーカスする必要があります (これは、太字、斜体、下線などの既定のボタンで発生しますが、カスタム メニュー項目では発生しません)。

または、クリックされたエディターのインスタンス ID を、何らかの形でテキストに貼り付ける関数に渡す必要があります。問題は、ドキュメントでこれら 2 つのタスクへの参照を見つけるのに苦労していることです。

tinyMCE 初期コード:

tinyMCE.init({
    forced_root_block : false,
    force_br_newlines : true,
    force_p_newlines : false,
    mode : "textareas",
    theme : "advanced",
    plugins : "contextmenu,paste,save,-stdpara",
    theme_advanced_buttons1 : ",bold,italic,underline,cleanup,|,undo,redo,|,cut,copy,paste,|,stdpara",
    theme_advanced_buttons2 : "",
    theme_advanced_toolbar_location : "top",
    theme_advanced_toolbar_align : "left",
    force_br_newlines : true,
    force_p_newlines : false,
    forced_root_block : '',
});    

(stdpara はカスタム メニュー プラグインです):

メニューコード (django を削除し、ランダムなデータを追加しただけです:

tinymce.create('tinymce.plugins.StandardParagraphPlugin', {
    createControl: function(n, cm) {
        switch (n) {
            case 'stdpara':
                var c = cm.createSplitButton('stdparagraph', {
                    title : 'Standard Paragraph',
                image : 'img/para.png',
                });

                c.onRenderMenu.add(function(c, m) {
                    m.add({title : 'Standard Paragraphs', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
                    category_menu = m.addMenu({title : 'Some Title'});
                    category_menu.add({title : 'Some sub-title', onclick : function() { tinyMCE.activeEditor.execCommand('mceInsertContent',false,'The Text') }); 
                    }});
                return c;
            }
        return null;
    }
});
4

3 に答える 3

2

メニュー項目がクリックされたときに、ツールバーがクリックされているエディターを強制的にフォーカスする必要があります (これは、太字、斜体、下線などの既定のボタンで発生しますが、カスタム メニュー項目では発生しません)。

これは正しいが、問題はここにある

tinyMCE.activeEditor.execCommand('mceInsertContent',false,'The Text')

これにより、アクティブなエディターでコマンドが実行されます。tinyMCE.activeEditorたとえば、ユーザーがエディターをクリックするとリセットされます。

ドロップダウンが属するエディターに対処することをお勧めします。少しトリッキーで、あまりエレガントに見えませんが、tinymce がボタンのロジックと名前を変更しない限り、tinymce の更新の証拠になります。ここで私のtinymceフィドルを参照してください:http://fiddle.tinymce.com/IZbaab/1

于 2012-08-24T12:32:26.827 に答える
1

将来のトラブルシューティングのために

createControl(n、cm)の2番目のパラメーター(つまり、「cm」パラメーター)はcontentManagerです。

現在のエディターを取得するには、単に呼び出すことができますcm.editor

コンテンツを挿入するには:cm.editor.execCommand('mceInsertContent', false, 'my text')

于 2012-12-18T07:29:51.190 に答える
1

それが役立つかどうかはわかりませんが、それぞれのテキストフィールドを次のように選択します:

tinyMCE.get('yourtextareaid').execCommand('mceInsertContent', false, 'bla');
于 2014-01-12T13:00:17.260 に答える