2012-04-04 103 views
1

我試圖從jQuery的對話框通過一個URL回CKEditor的對話框如何從jQuery的對話框通過URL來CKEDITOR對話框

CKEditor和jQuery對話框都可以使用。

問題是我不知道如何將CKEditorFuncNum傳遞給服務器。 我跳入源代碼並搜索'CKEditorFuncNum',並找到了訪問此變量的方法。

現在我得到的錯誤:

Uncaught TypeError: Cannot call method 'getDialog' of undefined 


這是工作流程:

  • 通話CKEditor的對話框[OK]
  • 調用jQuery的功能,使一個Ajax請求[確定]
  • 與co調用jQuery對話框Ajax請求的ntent [OK]
  • 密切jQuery的對話,並通過URL回到CKEditor的對話框(URL字段)< - 這裏的問題是


我改變了瀏覽按鈕調用一個jQuery函數(jQuery的彈出)

... 
{ 
    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 


如何resove這個矛盾呢?

範圍是否不正確?

我怎樣才能掌握CKEditor對話框

如何使用jQuery對話框中的選定URL填充CKEditor對話框的URL字段?


我將不勝感激任何意見。謝謝。

回答

0

好吧,這裏是我如何解決它:

傳值回使用window.parent.CKEDITOR.tools.callFunction...);對話框並沒有爲我工作。所以我尋找另一種方法來將一些值傳回CKEditor對話框。

我右邊調用jQuery的對話框(showJQueryPopUp())之前定義的回調函數(ref):

... 
{ 
    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請求傳遞funcNumref,並selected_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); 
    }