tinymce Dynami c добавить несколько пунктов меню в раскрывающееся меню - все onclick прямо к последнему элементу меню click - PullRequest
0 голосов
/ 29 мая 2020

Я использую tinymce + tinymce-variable . Я хочу создать раскрывающееся меню с пунктом меню Dynami c. На основе элементов из sql я могу создать несколько раскрывающихся меню. Я создал каждый элемент меню, используя editor.addMenuItem() внутри l oop.

for(i=0;i<data.length;i++)
{
    template_var    =data[i]['variable'];       
    text_val        =template_var.replace(/\s/g , " ");
    editor.addMenuItem(template_var,
    {
        text    :text_val,
        context :'newmenu',
        onclick :function ()
        {               
            editor.plugins.variable.addVariable(template_var);
        }
    })
}   

Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю любой элемент меню, он добавляет последний элемент меню в редактор, а не пункт меню, который я щелкнул. Я думаю, это overwrite the editor.plugins.variable.addVariable(template_var); to last menu item for all menu item. Как такое возможно?

Заранее спасибо.

1 Ответ

0 голосов
/ 30 мая 2020

Щелчок по пункту меню напрямую go, чтобы указать c строку editor.plugins.variable.addVariable(template_var); определенного пункта меню. Когда мы выполняем в l oop, он находит только одну строку этого кода. Вот почему щелчок по любому пункту меню выполняет щелчок только по последнему пункту меню, потому что этот код переопределяется для последнего пункта в конце l oop. Итак, я решаю это так. Я объединяю код editor.addMenuItem() для выполнения для каждого пункта меню в виде строки. Затем я выполняю эту строку в setup :function (editor){} of tinymce.init({}), используя eval(). Таким образом, когда мы нажимаем на пункт меню, он может найти editor.plugins.variable.addVariable(template_var); для конкретного пункта меню.

<script type="text/javascript">
variablenames_concat='';
addmenu_concat      ='';
for(j=0;j<data.length;j++)
        {
            variablenames_concat+=data[j]['variable']+',';
            template_var        =data[j]['variable'];
            text_val            =template_var.replace(/\s/g , " ");//remove underscore
            //string concatenate editor.addMenuItem for each of item 
            addmenu_concat      +='editor.addMenuItem("'+template_var+'",{text  : "'+text_val+'",context: "newmenu",onclick: function (){editor.plugins.variable.addVariable("'+template_var+'");}});';
        }
variablenames_concat = variablenames_concat.replace(/,\s*$/, "");//remove last coma

tinymce.init
({
  selector  : 'textarea',
  height    :  500, 
  plugins   : 'variable',
  menu      :
            {
                newmenu:
                {
                    title : 'Menu', items : variablenames_concat,           
                }
            },
 content_css: 
            [
                '//fonts.googleapis.com/css?family=Lato:300,300i,400,400i',
                '//www.tinymce.com/css/codepen.min.css'
            ],
content_style:".variable{cursor:default;background-color:#65b9dd;color:#FFF;padding:2px;border-radius:3px;font-weight: bold;font-style:normal;display:inline-block;}",


setup        : function (editor)
                    {
                      eval(addmenu_concat);
                    }
});
</script>
...