gpt4 book ai didi

javascript - CkEditor - 从 AJAX 加载的模板

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:49:13 25 4
gpt4 key购买 nike

我正在使用 CkEditor 并想定义一个自定义模板,它使用 AJAX 函数加载 HTML 字符串。我已经能够定义自定义模板,但是如果我将函数用于模板对象的 html 属性,则该函数永远不会被执行。是否可以通过默认模板插件使用 AJAX 加载模板,还是我需要自己编写?

配置.js

CKEDITOR.editorConfig = function (config) {
config.templates_files = ['/pathtomyfile/custom.js'];
};

custom.js(定义我的自定义模板)

CKEDITOR.addTemplates('default', {
imagesPath: CKEDITOR.getUrl(CKEDITOR.plugins.getPath('templates') + 'templates/images/'),
templates: [
{
title: 'Template 1',
image: 'template1.gif',
description: 'A custom template that does not work',
html: function () {
alert('This alert is never called');
var html = '';

$.ajax({
url: 'MyGetURL',
type: "GET",
async: false,
success: function (result) {
html = result;
},
error: function (jqXhr, textStatus, errorThrown) {
alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')");
}
});

return html;
}
},
{
title: 'Template 2',
image: 'template2.gif',
description: 'A working custom template',
html: '<h1>I Work!</h1>'
}
]
});

最佳答案

你不能这样走。第一个原因是编辑器希望 html 是一个字符串,而不是一个函数。第二个原因是您的 AJAX 请求没有意义,因为它是异步调用的,并且 return html 在请求完成之前执行。

无论如何,您要做的是在编辑器准备就绪后预加载您的寺庙。您可以使用 jQuery 代码简单地更改以下 XHR 请求,但您必须记住,您应该在 success 回调中调用 CKEDITOR.addTemplates:

CKEDITOR.replace( 'editor1', {
templates: 'my',
on: {
instanceReady: function( argument ) {
var httpRequest = new XMLHttpRequest();

httpRequest.onreadystatechange = function() {
CKEDITOR.addTemplates( 'my', {
templates: [
{
title: 'My AJAX-driven template',
html: this.responseText
}
]
});
};
httpRequest.open( 'GET', 'yourFile.html' );
httpRequest.send();
}
}
});

如果你真的想实时执行此操作(很难,我不推荐给你),你应该用加载自定义模板的代码覆盖 templates 命令,然后执行真正的命令.不过,我认为您不需要这样做。

玩得开心!

关于javascript - CkEditor - 从 AJAX 加载的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12636696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com