jquery - CK编辑器4 : add dynamic select element in plugin dialog

标签 jquery ajax ckeditor

我正在尝试使用 Ajax 查询中的数据填充选择元素。我正在接收数据:

['And here's a comment on this Bookmark. ..., 250'], ['Wow, another comment. ..., 251'], ['Okay, it's just another comment. ..., 252']

...但我无法用数据填充实际的选择元素。到目前为止,我已经:

CKEDITOR.dialog.add( 'commentDialog', function( editor ) {

    function get_bookmark_comments_as_object () {
        var objBookmark = new Object({
            items: []
        });
        objBookmark.id = 7193;
        $.ajax({
            url: base_url + "comments/jq_get_bookmark_comments_as_object/" + objBookmark.id,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            cache: false,
            async: false,
            success: function (element) {
                for (var i=0;i<element.length;i++) {
                    objBookmark.items.push("['" + element[i].comment_snippet + ", " + element[i].bookmark_comment_id + "']");
                }
                String.prototype.unquoted = function () { return this.replace (/(^")|("$)/g, '') }
                var string = objBookmark.items.join(', ');
                console.log(string);
                return string.unquoted();
            },
            error: function () {

            }
        });
    }

...

...和:

return {
    // Basic properties of the dialog window: title, minimum size.
    title: 'Comment Properties',
    minWidth: 400,
    minHeight: 200,
    // Dialog window contents definition.
    contents: [
        {
            // Definition of the Basic Settings dialog tab (page).
            id: 'tab-basic',
            label: 'Basic Settings',
            // The tab contents.
            elements: [
                {
                    // Text input field for the abbreviation text.
                    type: 'select',
                    id: 'comment',
                    label: 'Select a Comment',
                    items: [['Select a Comment', 0]].concat( get_bookmark_comments_as_object() ),
                    setup: function( element ) {
                        this.setValue( element.getText() );
                    },
                    commit: function( element ) {
                        ...
                    }
                }
            ]
        }
    ],

正如您从 get_bookmark_comments_as_object() 函数中看到的,我返回了精确格式的字符串。

任何返回普通数组或字符串的尝试都会使 select 元素表现得很奇怪(例如,字符串周围的双引号会导致 CKEditor 将整个字符串拆分为字符部分)。然而,当我从 console.log() 结果复制并粘贴时,它起作用了。

我已经尝试了 items: ... 的多种变体,但没有可用的结果。

我尝试将 jQuery/Ajax 代码放入 setup: ...commit: ... 中,但没有可用的结果。

我也尝试过 fix from a similar thread ,但这也没有任何作用。

我已经尽力了,剩下的对我来说还是个谜。

更新

经过一番研究后,我发现:

var items = [['And here&#39;s a comment on this Bookmark. ...', '250'], ['Wow, another comment. ...', '251'], ['Okay, it&#39;s just another comment. ...', '252']];

...有效,但是:

var items = get_bookmark_comments_as_object();

...不会,即使字符串是相同的。

因此,无论出于何种原因,CKEditor(或者,我认为是 JavaScript)都被我不知道是什么所窒息。

最佳答案

以下是我在这种情况下在 CKEDITOR 小部件对话框中所做的操作。

id: 'modelStudentCaseVariable',
type: 'select',
label: 'Student Case',
items: [
    [ editor.lang.common.notSet, '' ]
],

onLoad: function (widget) {
    var selectList = this;
    var url = $("#studentCaseVarsUrl").val();
    $.getJSON(url, function(data) {
        $.each(data, function(key, val) {
            selectList.add(key, val);
        });
    });
},

关于jquery - CK编辑器4 : add dynamic select element in plugin dialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24840935/

相关文章:

javascript - 定期测试页面加载后添加到 DOM 的元素

javascript - 当我将 jQuery 与 ajax (XMLhttpREquest) 结合使用时,jQuery 不起作用,为什么?

PHP 文件无法识别从 ajax 文件发送的数据

javascript - ajax将json值传递给html输入类型文本

javascript - CKEditor 定义自定义工具栏

javascript - 冲突的 "back to top"脚本 - 如何解决?

javascript - X O 游戏(我如何证明玩家一(p1)或玩家二(p2)如果达到(var winBoxes)中的条件之一就会获胜

javascript - CKEditor 4 中的字数统计

javascript - knockout 绑定(bind)和 CK 编辑器工具栏未出现

javascript - 隐藏表行的问题