1

我正在尝试将jQuery 对话框中的 URL 传递回CKEditor 对话框

CKEditor 和 jQuery 对话框都可以工作。

问题是我不知道如何将 CKEditorFuncNum 传递给服务器。 我深入研究了源代码并搜索了“CKEditorFuncNum”并找到了一种访问此变量的方法。

现在我得到错误:

Uncaught TypeError: Cannot call method 'getDialog' of undefined


这是工作流程:

  • 调用 CKEditor 对话框 [OK]
  • 调用发出 ajax 请求的 jQuery 函数 [OK]
  • 使用 ajax 请求的内容调用 jQuery 对话框 [OK]
  • 关闭 jQuery 对话框并将 url 传递回 CKEditor 对话框(URL 字段)<-这是问题所在


我将浏览按钮更改为调用 jQuery 函数(jQuery Popup)

...
{
   type : 'button',
   id : 'browseInternal',
   label : 'jQuery Popup',
   onClick :function() {
     var funcNum = this.getDialog().getParentEditor()._.filebrowserFn;
     showJQueryPopUp(funcNum);
   }
}
...


jQuery 函数发出一个 get 请求,传递 CKEditorFuncNum 值。如何访问 CKEditorFuncNum 值?(见下文)

function showJQueryPopUp(funcNum) {
    ajax_url = '../../../site_links?CKEditorFuncNum=' + funcNum;
    $.get(ajax_url, function(data) {
        $('#my_dialog_content').html(data);
        $('#my_dialog').dialog('open');
    });
};


ajax 请求返回一个 url 列表和一些 JavaScript 代码:

<a href="#" onclick="modify_link('http://www.google.com'); return false;">
  Google
</a>
<a href="#" onclick="modify_link('http://www.yahoo.com'); return false;">
  Yahoo
</a>
<a href="#" onclick="modify_link('http://www.microsoft.com'); return false;">
  Microsoft
</a>

<script type='text/javascript'>
  function modify_link(url) {
    window.parent.CKEDITOR.tools.callFunction(<%= @funcNum %>, url, '' );
  }
</script>



调用window.parent.CKEDITOR.tools.callFunction(...); 导致以下错误:

Uncaught TypeError: Cannot call method 'getDialog' of undefined


我该如何解决这个冲突?

范围不正确?

如何获得CKEditor 对话框

如何使用从 jQuery 对话框中选择的 url 填充 CKEditor 对话框的 URL 字段?


我会很感激任何建议。谢谢你。

4

1 回答 1

0

好的,这是我解决它的方法:

使用将值传回对话框window.parent.CKEDITOR.tools.callFunction...);对我不起作用。所以我寻找另一种方法将一些值传递回 CKEditor 对话框。

ref我在调用 jQuery 对话框 () 之前定义了一个回调函数 ( showJQueryPopUp()):

...
{
  type : 'button',
  id : 'browseInternal',
  label : 'jQuery Popup',
  onClick :function() {
      var dialog = this.getDialog();
      var selected_url = dialog.getContentElement('info', 'url').getValue();

      var ref = CKEDITOR.tools.addFunction(
          function(url)
          {
              dialog.getContentElement('info','url').setValue(url);
          });

      var funcNum = this.getDialog().getParentEditor()._.filebrowserFn;
      var editor_name = this.getDialog().getParentEditor().name;
      showJQueryPopUp(funcNum, editor_name, ref, selected_url);
  }
}
...


我发出一个 ajax 请求,传递funcNum,refselected_url. (ref只是一个数字)

function showJQueryPopUp(funcNum, editor_name, ref, selected_url) {
    var ajax_url = '../../../site_links?CKEditorFuncNum=' + funcNum + '&ref=' + ref + '&selected_url=' + selected_url;
    $.get(ajax_url, function(data) {
        $('#my_dialog_content').html(data);
        $('#my_dialog').dialog('open');
    });
};


服务器端脚本提取参数并将其传递给视图(@ref):

<a href="#" onclick="modify_link('http://www.google.com'); return false;">
  Google
</a>
<a href="#" onclick="modify_link('http://www.yahoo.com'); return false;">
  Yahoo
</a>
<a href="#" onclick="modify_link('http://www.microsoft.com'); return false;">
  Microsoft
</a>
<script type='text/javascript'>
  function modify_link(url) {
    CKEDITOR.tools.callFunction(<%= @ref %>, url);
  }
于 2012-04-05T19:58:52.377 回答