Javascript addButton第二次不工作
下面是一个场景:我们正在开发一个类似CMS的工具,用于管理各种电子邮件活动的副本。有一个表单,允许用户从tinymce编辑器(v4.1.6)中选择要使用的模板 为了支持通配符,正在使用按钮获取值以填充tinymce中的下拉菜单。这一切在第一次使用时都很好,但是当用户选择一个新的模板(这会稍微改变表单)时,一个空按钮就会出现在菜单应该出现的地方 我一步一步地看代码,每一步都在看变量值,结果发现每个变量都保存着我希望它们保存的值,每个函数都在我需要调用的时间和地点被调用。我不能,为了我的生命,弄明白为什么我在第二次Javascript addButton第二次不工作,javascript,tinymce,tinymce-4,Javascript,Tinymce,Tinymce 4,下面是一个场景:我们正在开发一个类似CMS的工具,用于管理各种电子邮件活动的副本。有一个表单,允许用户从tinymce编辑器(v4.1.6)中选择要使用的模板 为了支持通配符,正在使用按钮获取值以填充tinymce中的下拉菜单。这一切在第一次使用时都很好,但是当用户选择一个新的模板(这会稍微改变表单)时,一个空按钮就会出现在菜单应该出现的地方 我一步一步地看代码,每一步都在看变量值,结果发现每个变量都保存着我希望它们保存的值,每个函数都在我需要调用的时间和地点被调用。我不能,为了我的生命,弄明白
tinymce时没有得到相同的结果.init()
正在被调用。无论如何,下面是代码,它是一个相当大的模块的一部分,但是tinyInit
函数是非常独立的:
var tinyInit = (function()
{
var i,menu =[],
cbContainer = {
editor: false,
cb: function () {
cbContainer.editor.execCommand(
'mceInsertContent',
false,
this._value
);
}
};
return function (btns)
{
var config = {
selector: 'textarea',
setup: function (editor) {
cbContainer.editor = editor;
editor.addButton('button', {
type: 'menubutton',
text: 'Placeholders',
name: 'placeholders',
icon: false,
menu: menu
});
},
toolbar: " button "
};
for (i=0;i<tinymce.editors.length;++i) {
//or tinymce.editors[i].remove();
tinymce.execCommand('mceRemoveEditor', false, tinymce.editors[i].remove());
}
cbContainer.editor = false;
btns = btns || $('.placeholders');
for (i = 0, menu.splice(0, menu.length); i < btns.length; ++i) {
menu.push(
{
text: btns[i].textContent,
value: btns[i].value,
onclick: cbContainer.cb
}
);
}
(btns instanceof $ ? btns : $(btns)).remove();
if (SomeGlobalModule.viewSource) {
config.plugins = 'code';
}
tinymce.init(config);
};
}());
同样,所有函数(包括设置
回调)都被调用,菜单
变量始终具有预期值。那么,为什么不填充下拉列表?更新:下面列出的解决方案仍然是我实现占位符菜单业务的唯一途径。不过,与此同时,我已经找到时间编写了一个TinyMCE插件,我已经发布了。
因为我发现有证据表明人们试图做和我一样的事情,每次答案都是你自己写的自定义插件,我决定创建一个拉式请求,让TinyMCE的维护人员自己提供这个插件。如果你碰巧发现这个问题/答案,并想看到这个插件被包括在蒂尼姆斯 我已经找到了一些时间来再次实际研究这个问题。我决定创建一个实际的插件,而不是使用
设置回调添加按钮/菜单。为了让我的生活更轻松,我决定将插件添加到我的tinyInit
函数的管理器中,像以前一样构造菜单数组e现在看起来像这样:
<textarea>Foobar</textarea>
<button class="placeholders" value="%NAME%">Name</button>
<button class="placeholders" value="%DATE%">Date</button>
var tinyInit = (function()
{
var i,menu =[],
cbContainer = {
editor: false,
cb: function () {
tinymce.activeEditor.execCommand(
'mceInsertContent',
false,
this._value
);
}
};
return function (btns)
{
var config = {
selector: 'textarea',
plugins: ['placeholders'],
toolbar1: "placeholders"
};
for (i=0;i<tinymce.editors.length;++i) {
//or tinymce.editors[i].remove();
tinymce.execCommand('mceRemoveEditor', false, tinymce.editors[i].remove());
}
cbContainer.editor = false;
btns = btns || $('.placeholders');
for (i = 0, menu.splice(0, menu.length); i < btns.length; ++i) {
menu.push(
{
text: btns[i].textContent,
value: btns[i].value,
onclick: cbContainer.cb
}
);
}
tinymce.PluginManager.add('placeholders', function(editor) {
editor.addButton('placeholders', {
text: 'Placeholders',
type: 'menubutton',
name: 'placeholders',
icon: false,
menu: menu
});
});
(btns instanceof $ ? btns : $(btns)).remove();
if (SomeGlobalModule.viewSource) {
config.plugins = 'code';
}
tinymce.init(config);
};
}());
var tinyInit=(函数()
{
变量i,菜单=[],
cbContainer={
艺术经纬:错,
cb:函数(){
tinymce.activeEditor.execCommand(
“mceInsertContent”,
假,,
这是你的价值
);
}
};
返回功能(btns)
{
变量配置={
选择器:'textarea',
插件:[“占位符”],
工具栏1:“占位符”
};
对于(i=0;i
var tinyInit = (function()
{
var i,menu =[],
cbContainer = {
editor: false,
cb: function () {
tinymce.activeEditor.execCommand(
'mceInsertContent',
false,
this._value
);
}
};
return function (btns)
{
var config = {
selector: 'textarea',
plugins: ['placeholders'],
toolbar1: "placeholders"
};
for (i=0;i<tinymce.editors.length;++i) {
//or tinymce.editors[i].remove();
tinymce.execCommand('mceRemoveEditor', false, tinymce.editors[i].remove());
}
cbContainer.editor = false;
btns = btns || $('.placeholders');
for (i = 0, menu.splice(0, menu.length); i < btns.length; ++i) {
menu.push(
{
text: btns[i].textContent,
value: btns[i].value,
onclick: cbContainer.cb
}
);
}
tinymce.PluginManager.add('placeholders', function(editor) {
editor.addButton('placeholders', {
text: 'Placeholders',
type: 'menubutton',
name: 'placeholders',
icon: false,
menu: menu
});
});
(btns instanceof $ ? btns : $(btns)).remove();
if (SomeGlobalModule.viewSource) {
config.plugins = 'code';
}
tinymce.init(config);
};
}());