在Dojo中集成Orion编辑器时遇‘orion is undefined’错误求助
搞定Dojo集成Orion编辑器的
orion is undefined错误 嘿,我一眼就看到问题所在啦!你在Dojo Widget里直接调用orion.codeEdit(),但Orion的AMD构建包(就是你导入的built-codeEdit-amd)根本不会把orion暴露成全局对象——它是通过AMD模块导出API的,而你已经在require里把这个模块命名为codeEditorAmd了,所以得用这个导入的变量来访问Orion的功能,而不是找全局的orion。
下面给你详细说怎么改:
问题根源拆解
你现在的代码里,虽然正确引入了Orion的AMD模块,但却跳过了导入的codeEditorAmd,直接去调用全局的orion——这在Dojo的AMD加载环境里肯定找不到啊!Orion的AMD版本是把所有API封装在模块内部导出的,不会挂到window.orion上。
修正后的JS代码
require([ "dojo/_base/declare", "dijit/_WidgetBase", "editorBuild/code_edit/built-codeEdit-amd", "dijit/_TemplatedMixin", "dojo/text!orionEditor.html" ], function(declare, _WidgetBase, codeEditorAmd, _TemplatedMixin, template){ declare("orionEditor", [_WidgetBase, _TemplatedMixin], { templateString: template, postCreate: function(){ // 重点改这里:用导入的codeEditorAmd来获取codeEdit构造函数 var codeEdit = new codeEditorAmd.codeEdit(); var contents = ''; codeEdit.create({ parent: this.embeddedEditor, contentType: "application/javascript", contents: contents }).then(function(editorViewer) { if (editorViewer.settings) { editorViewer.settings.contentAssistAutoTrigger = true; editorViewer.settings.showOccurrences = true; } }); } }); });
额外要检查的地方
- 先确认模块导出结构:如果改完还是有问题,不妨在回调里加个
console.log(codeEditorAmd),看看这个模块里到底有哪些属性,确保codeEdit确实在里面。 - 模块路径要对:得保证Dojo能找到
editorBuild/code_edit/built-codeEdit-amd.js,检查一下这个文件夹的位置是不是和你写的路径一致,要是有嵌套层级的话得调整路径。 - Orion文件要完整:Orion的AMD包可能依赖其他子模块,别只放了
built-codeEdit-amd.js,把editorBuild里的所有文件都保留好,避免缺失依赖。
既然你已经验证过Orion单独运行没问题,那只要把全局调用改成用导入的模块,这个错误应该就能解决啦!
内容的提问来源于stack exchange,提问作者Sunil
相关产品推荐
相关产品推荐

