如何将URL从jQuery对话框传递到CKEditor对话框

时间:2012-04-04 09:35:49

标签: jquery ajax dialog popup ckeditor

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

CKEditor和jQuery对话框都有效。

问题是我不知道如何将CKEditorFuncNum传递给服务器。 我潜入源代码并搜索'CKEditorFuncNum'并找到了访问此变量的方法。

现在我收到了错误:

Uncaught TypeError: Cannot call method 'getDialog' of undefined


这是工作流程:

  • 调用CKEditor对话框[确定]
  • 调用jQuery函数发出ajax请求[确定]
  • 使用ajax请求的内容调用jQuery对话框[确定]
  • 关闭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请求返回一个网址列表和一些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对话框中选定的网址填写CKEditor对话框的URL字段?


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

1 个答案:

答案 0 :(得分:0)

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

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

我在调用jQuery对话框(ref)之前定义了一个回调函数(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);
  }
}
...


我通过funcNumrefselected_url发出了ajax请求。 (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');
    });
};


serverside脚本提取参数并将其传递给视图(@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);
  }