ror*_*yok 17 javascript jquery ckeditor
我写了一个插件,RichCombo为我的CKEditor 添加了一个盒子.我希望能够在更新内容ListBox中本RichCombo
这是我的代码.
var merge_fields = [];
CKEDITOR.plugins.add('mergefields',
{
requires: ['richcombo'], //, 'styles' ],
init: function (editor) {
var config = editor.config,
lang = editor.lang.format;
// Gets the list of tags from the settings.
var tags = merge_fields; //new Array();
// Create style objects for all defined styles.
editor.ui.addRichCombo('tokens',
{
label: "Merge",
title: "title",
voiceLabel: "voiceLabel",
className: 'cke_format',
multiSelect: false,
panel:
{
css: [config.contentsCss, CKEDITOR.getUrl(CKEDITOR.skin.getPath('editor') + 'editor.css')],
voiceLabel: lang.panelVoiceLabel
},
init: function () {
// this.startGroup("mergefields");
for (var this_tag in tags) {
this.add(tags[this_tag], tags[this_tag], tags[this_tag]);
}
},
onClick: function (value) {
editor.focus();
editor.fire('saveSnapshot');
editor.insertText(value);
editor.fire('saveSnapshot');
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个列表在merge_fields更改时不会更新.有没有办法重新初始化插件,或失败删除它并重新添加更新的内容?
注意我不想删除整个编辑器并替换它,因为这看起来对用户来说非常不愉快
根据要求,这是一个帮助的jsfiddle
在这个JSFiddle中,您将看到菜单是在第一次访问时动态创建的.它应该是选中的复选框.但是,每次访问它时,它都会保持相同的值并且不会更新.更新它的唯一方法是使用我提供的reinit按钮重新初始化编辑器,但这会导致编辑器消失并重新出现,所以我不想这样做.
对于可以使下拉列表动态更新的人,每次调用200点奖励.
我想我已经为你找到了解决办法。
在你的richCombo函数中init添加这一行:
$('input').on('click', rebuildList);
非常简单的 JQuery 修复,但每次我单击这些输入框时,它都会重建列表。
小提琴证明:https://jsfiddle.net/q8r0dkc4/7/