Все пункты меню в TinyMCE SplitButton используют один и тот же обратный вызов - PullRequest
3 голосов
/ 20 июля 2010

Я создал SplitButton в TinyMCE и использую цикл for для добавления кнопок, но по какой-то причине нажатие кнопок всегда вызывает один и тот же (последний из цикла for).Кажется, каждый раз, когда я добавляю опцию меню, обратный вызов перезаписывается.

Позвольте мне описать, что я имею в виду.

var c = cm.createSplitButton('optionsList', {
title : 'Options',
});

c.onRenderMenu.add(function(c, m){
var Opts1 = options[0];
var Opts2 = options[1];
var Opts3 = options[2];

var sub1 = m.addMenu({title: "Options 1"});
for(var x in Opts1){
    sub1.add({title: Opts1[x], onclick: function(){
        tinyMCE.activeEditor.execCommand('mceInsertContent',false,Opts1[x]);
    }});
}

var sub2 = m.addMenu({title: "Options 2"});
for(var y in Opts2){
    sub2.add({title: Opts2[y], onclick: function(){
        tinyMCE.activeEditor.execCommand('mceInsertContent',false,Opts2[y]);
    }});
}

var sub3 = m.addMenu({title: "Options 3"});
for(var z in Opts3){
    sub3.add({title: Opts3[z], onclick: function(){
        tinyMCE.activeEditor.execCommand('mceInsertContent',false,Opts3[z]);
    }});
}

});

Меню создаются правильно, но, например, если я выбираю«Опции 1» и выберите любую опцию, tinyMCE напечатает последнюю опцию из этого подменю.Я не знаю, как это исправить.

1 Ответ

5 голосов
/ 21 июля 2010

Я исправил это, поэтому я отвечу на свой вопрос.Мне нужно было использовать закрытие.Решение было:

var insertVar = function(val){
    return function(){tinyMCE.activeEditor.execCommand('mceInsertContent',false,val);}
};

var sub1 = m.addMenu({title: "Options 1"});
for(var x in Opts1){
    var variable = insertVar(Opts1[x]);
    sub1.add({title: Opts1[x], onclick: variable});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...