在Summernote中将动态自定义按钮添加为数组

时间:2019-04-09 16:42:49

标签: javascript jquery arrays summernote

我使用所见即所得的编辑器“ summernote”和codeigniter。我想在工具栏上添加自己的按钮,以在单击时插入特定的文本。 summernote documentation中描述了这种情况。

夏季提示:

$('#model_txt').summernote({
    height: 250,

    toolbar: [
        ['style', ['bold', 'italic', 'underline', 'clear']],
        ['font', ['strikethrough', 'superscript', 'subscript']],
        ['fontsize', ['fontsize']],
        ['color', ['color']],
        ['para', ['ul', 'ol', 'paragraph']],
        ['height', ['height']]
    ]
});

但是我分别获得按钮名称,它们是从数据库中单击时插入的文本。我通过ajax调用获取数据,该调用调用了一个PHP函数,该函数从查询中打印数据。

AJAX呼叫:

var all_vars = null;

$.ajax({url: "get_vars", success: function(result){
     all_vars = result.split(";");
});

现在我有一个包含名称的数组(例如:all_vars[0])。 但是我不知道如何将名称作为按钮插入工具栏...可以帮我吗?


有人可以帮我吗?我用JS函数eval()尝试了此方法,它可以工作,但我认为它不是最佳解决方案...

“ 127.0.0.1/create_var_buttons”上的PHP函数动态创建JS代码。

<script>
$(document).ready(function() {

    var resturl = 'http://127.0.0.1/create_var_buttons';

    $.ajax({
        url: resturl,
        success: function(data){
            eval(data);
        }
    });

});

1 个答案:

答案 0 :(得分:1)

我以前也遇到过同样的需求,并且这样做是这样的:

  • 我必须声明一个变量来保存summernote的工具栏数组:

    var工具栏= [     ['style',['bold','italic','underline','clear']],     ['insert',['picture','link']],     ['misc',['undo','redo','codeview']],     ['para',['ul','ol','paragraph']],     ['fontsize',['fontsize','height']],     ['color',['color']],     ['forecolor',['forecolor']],     ['custom',['forcarJustificar']] ];

  • 将数据保存到summernotes的“ buttons”属性的另一个方法:

    var opt_btns_custom = {         forcarJustificar:forcarJustificar     };

  • 另一个变量,用于保存整个summernote的选项:

    var sm_options = {     高度:altura,     工具栏:工具栏,     按钮:opt_btns_custom,     回调:{} }

  • 然后,我将下面需要编写的每个按钮创建为Ajax的.done()函数:

    function addBtnText(b_content,b_tooltip,text){

    var sm_botao_custom = function (context) {
        var ui = $.summernote.ui;
    
        options = {
            contents: b_content,
            tooltip: b_tooltip,
            click: function () {
                context.invoke('editor.insertText', text);
            }
        }
    
        var button = ui.button(options);
    
        return button.render();
    }
    
    i = Math.floor(Math.random() * (1000 - 1 + 1)) + 1;
    
    toolbar.push(['custom', ['sm_botao_custom_'+i]]);
    
    opt_btns_custom['sm_botao_custom_'+i] = sm_botao_custom;
    
    //Restart SM to apply the created buttons
    $('#d_summernote').summernote('destroy');
    $('#d_summernote').summernote(sm_options);
    

    }

OBS:我使用随机数(i)避免与SM内的按钮发生冲突。