TinyMCE4 file_picker_callback - 返回其他参数

Sig*_*eve 16 javascript tinymce callback filepicker tinymce-4

我正在使用自己的自定义文件选择器和TinyMCE 4的新file_picker_callback函数.关于这个的文档并不是很好,所以有信心让弗雷德让我这么做 - /sf/answers/1720026031/

自定义文件选择器正在工作,当您单击图像时,它会填充"源"和"维度".我只是想知道是否有任何方法可以自动填写"图像描述"字段.

图像的信息是从数据库表生成的,所以我已经有了描述,自动为用户填写它会很好.在尝试了各种传递数据的方法后,我很难理解它是如何完成的.

TinyMCE代码:

tinymce.init({
    ...
    file_picker_callback: function(callback, value, meta) {
        myImagePicker(callback, value, meta);
    }
});

function myImagePicker(callback, value, meta) {
    tinymce.activeEditor.windowManager.open({
        title: 'Image Browser',
        url: '/media/browser/1?type=' + meta.filetype,
        width: 800,
        height: 550,
    }, {
        oninsert: function (url) {
            callback(url);
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

自定义文件选择器的代码:

$(function(){
    $('.img').on('click', function(event){
        mySubmit('/upload/' + $(this).data('filename'));
    });
});

function mySubmit(url) {
    top.tinymce.activeEditor.windowManager.getParams().oninsert(url);
    top.tinymce.activeEditor.windowManager.close();
}
Run Code Online (Sandbox Code Playgroud)

我的javascript知识并不是最好的,因为我对它很陌生,所以如果你可以请用例子和/或明确的逻辑来说明任何答案,这将是非常有用和非常感激的.

小智 15

我遇到了同样的问题,并提出了以下解决方案:

  1. 更新您的myImagePicker函数(注意函数的新objVals参数oninsert):

    function myImagePicker(callback, value, meta) {
        tinymce.activeEditor.windowManager.open({
            title: 'Image Browser',
            url: '/media/browser/1?type=' + meta.filetype,
            width: 800,
            height: 550,
        }, {
            oninsert: function (url, objVals) {
                callback(url, objVals);
            }
        });
    };
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更新您的mySubmit函数(注意objVals传递给的参数oninsert):

    function mySubmit (url, objVals) {
        top.tinymce.activeEditor.windowManager.getParams().oninsert(url, objVals);
        top.tinymce.activeEditor.windowManager.close();
        return false;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 更新您调用mySubmit以填充objVals对象的位置.

    例如:

    mySubmit("https://google.com", { text: "Go To Google", target: '_blank' });
    
    Run Code Online (Sandbox Code Playgroud)

    根据objVals调用对话框的类型填充更改的属性,并在此处(部分)记录.

    对于链接对话框:

    mySubmit("https://google.com", { text: "Go To Google", target: '_blank' });
    
    Run Code Online (Sandbox Code Playgroud)

    对于图像对话框:

    mySubmit("image.jpg", { alt: "My image" });
    
    Run Code Online (Sandbox Code Playgroud)

    对于mediadialog:

    mySubmit("movie.mp4", {source2: 'movie-alt.ogg', poster: 'movie-image.jpg'});
    
    Run Code Online (Sandbox Code Playgroud)