代码之家  ›  专栏  ›  技术社区  ›  gen_Eric

TinyMCE SplitButton中使用相同回调的所有菜单项

  •  3
  • gen_Eric  · 技术社区  · 14 年前

    我在TinyMCE中创建了一个SplitButton,并使用for循环添加按钮,但是由于某些原因,按钮的onclick总是调用同一个按钮(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 回复  |  直到 14 年前
        1
  •  5
  •   gen_Eric    12 年前

    我修好了,所以我会回答我自己的问题。我需要用闭包。解决方案是:

    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});
    }