2010-07-20 84 views
3

我在TinyMCE中創建了一個SplitButton,我使用for循環來添加按鈕,但由於某些原因,按鈕的onclick始終調用相同的一個(最後一個來自for循環)。似乎每次添加菜單選項時,回調都被覆蓋。使用相同回調的TinyMCE SplitButton中的所有菜單項

讓我來描述一下我的意思。

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的將打印從子菜單中選擇最後一個選項。我不知道如何解決這個問題。

回答

5

我修好了,所以我會回答我自己的問題。我需要使用閉包。解決方案是:

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

很好的解決方案。我也遇到這個問題。現在它工作:) – 2013-01-17 07:52:02

相關問題