我想将一个可变的“templateBody”传递给一个函数是否可能? 这是我的代码
function GetMenu(){
var templates = [{name:"maher",body:"<p>Maher test</p>"},{name:"Jeremy",body:"<p>Jeremy test</p>"}]
var payload = []
for (var i = 0; i<templates.length; i++){
var templateBody = templates[i].body
payload.push({
text : templates[i].name,
onclick: function(templateBody){tinymce.activeEditor.execCommand('mceInsertContent', false, templateBody);}
})
}
return payload
}
答案 0 :(得分:1)
如果要调用该函数,则只能传递变量。但你不是。但是,由于所有JavaScript函数都是闭包,因此您仍然可以访问在更高范围内定义的任何变量。没什么特别的。
您的代码存在的问题是您使用参数 templateBody
阴影 变量 templateBody
。删除它:
function(templateBody) -> function()
另一个问题是你在循环中创建一个函数。这对闭包不起作用,但有解决方案:JavaScript closure inside loops – simple practical example
答案 1 :(得分:0)
你有:
function(templateBody){
tinymce.activeEditor.execCommand('mceInsertContent', false, templateBody);
}
鉴于属性的名称,我希望在onclick
事件触发时调用此属性。将事件作为templateBody注入函数,它不会使用上面定义的templateBody。
此外,templateBody被用作循环内的闭包,这意味着它不会对定义的函数保持不变。你需要一个合适的闭包模式:
(function(templateBody){
return function() {
tinymce.activeEditor.execCommand('mceInsertContent', false, templateBody);
}
})(templateBody);