2012-07-06 80 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