2012-07-06 98 views
3

爲什麼這得到'cannot call method getContent of undefined',這怎麼可能?它使用tinyMCE設置我的textarea,但不能完成getContent。不能調用方法tinymce

tinyMCE.init({ 
      plugins: 'paste', 
      theme : "advanced", 
      mode : "specific_textareas", 
      editor_selector : element, 
      width : width, 
      theme_advanced_buttons1 : "bold,italic,underline,strikethrough,bullist,numlist,undo,redo,", 
      theme_advanced_buttons2 : "", 
      theme_advanced_buttons3 : "", 
      theme_advanced_toolbar_location : "top", 
      theme_advanced_toolbar_align : "left", 
      content_css : "hhhng.css", 
      paste_text_sticky : true, 
      //select pasteAsPlainText on startup 
      setup : function(ed) { 
        ed.onInit.add(function(ed) { 
        ed.pasteAsPlainText = true; 
       }); 
      } 
}); 
var x = tinyMCE.get(element).getContent(); 

更新

,當我從一個按鈕,點擊呼叫,但爲什麼不立即工作後TinyMCE的是初始化工作的?是的,它是在一個文檔準備塊。這不是決策意識給我:S

$("#button").click(function(e) { 

    e.preventDefault(); 
    console.log(tinyMCE.activeEditor.getContent()); 

}); 
+0

它工作在一個按鈕點擊,因爲編輯器初始化到那個時間點 – Thariama 2012-07-06 12:13:09

回答

6

即使它在文檔準備好塊也可能是TinyMCE的不立即創造本身初始化時被調用。如果你想在初始化後運行代碼,那麼你應該看看它是否提供了傳遞迴調函數的方法。一旦它準備好了,它就會調用這個函數。

事實上,它看起來像你已經在使用這樣的功能與這段代碼:

//select pasteAsPlainText on startup 
setup : function(ed) { 
     ed.onInit.add(function(ed) { 
     ed.pasteAsPlainText = true; 
    }); 
} 

只需添加您的帖子初始化代碼到函數體。

+0

+1這是真的原因 – Thariama 2012-07-06 12:08:08

1

除了阿爾諾斯的答案我想告訴你如何儘早獲得內容。 tinymce編輯器實例正在創建中,需要一些時間,正如alnorth所說,當你請求它時,它並不存在。

如果您使用tinymce配置(init)參數設置並設置了onInit處理程序,那麼您可以請求內容並且編輯器在那裏作出響應。它是:

setup : function(ed) { 

    ed.onInit.add(function(ed, evt) { 
     var x = tinyMCE.get(element).getContent(); 
     console.log(x); 
    }); 
}, 

... 

編輯器準備就緒(即將使用)時,tinymce onInit事件即被觸發。

+0

謝謝,現在我面臨嘗試返回初始化tinymce實例的問題,因此它可以在另一個requirejs中使用模塊:( – 2012-07-06 12:53:16

+0

從你告訴這似乎不可能 - 是否有另一個SO問題與問題的詳細說明? – Thariama 2012-07-06 13:34:14

+0

給我一分鐘:) – 2012-07-06 13:49:15