多年来我一直愉快地使用tinyMCE。今天开始使用新的网络表单时,我在访问编辑器时遇到了两个我以前从未遇到过的问题:
首先,使用jQuery.ready调用tinyMCE.init来初始化
<textarea id="message_content" name="content"></textarea>
,然后调用一个通过AJAX检索数据的函数来初始化<textarea>
是字段的表单,但发现tinyMCE.get("message_content")
返回了一个对象没有 setContent
功能。幸运的是,我通过使用 setTimeout 将加载函数的调用延迟 100 毫秒来使其工作。我没有意识到 tinyMCE.init
中有异步活动,我必须等待。我之前的项目是不是很幸运?
其次,当提交表单时尝试调用
triggerSave()
时,即使在解决了第一个问题之后,tinyMCE.get("message_content")
也传递了一个没有 triggerSave
函数的对象。奇怪的是,仅使用 tinyMCE.triggerSave()
就可以在提交之前更新表单字段,因为页面上只有一个。
我在这两种情况下都对 textarea id 的拼写进行了三次检查。我通过多年来使用的同一个 PHP 函数发出tinyMCE.init,该函数获取应初始化 tinyMCE 的所有字段的元素 id,在本例中只有一个字段。
我对tinyMCE有什么不理解的地方,这可以解释为什么在这两种情况下
tinyMCE.get("message_content")
没有返回<textarea>
的编辑器?预先感谢您的任何提示。我正准备敲头呢……
对于第一点:
tinymce.init()
返回一个Promise
,所以如果你想同步使用它,你需要await
它。请参阅 tinymce.init()
API 文档。
对于你的第二个问题,你似乎误解了API。
Editor
没有 triggerSave()
方法,它们有 save()
方法。 tinymce.triggerSave()
方法会触发页面上每个 save()
实例上的 Editor
方法。请参阅 API 文档了解 triggerSave()
和 save()
。