ICN 3.0.3 IF7自定义插件配置时报错但运行正常求助
cls is not a constructor的解决方案 我之前在ICN 3.x版本中遇到过完全一样的问题——插件能正常运行,但配置时控制台抛出错误,还没法查看插件详情。这个问题本质是ICN在加载插件管理界面的配置组件时找不到正确的构造函数,下面是我排查和解决的步骤:
首先先明确你的报错信息:
Uncaught TypeError: cls is not a constructor at Object.eval (ecm/widget/layout/AdminPane.js:9845) at dojo.js.jgz:22442 at runFactory (dojo.js.jgz:611) at execModule (dojo.js.jgz:691) at dojo.js.jgz:397 at guardCheckComplete (dojo.js.jgz:699) at contextRequire (dojo.js.jgz:396) at req (dojo.js.jgz:32) at Object._displayPluginConfig (ecm/widget/layout/AdminPane.js:9844) at Object._pluginRequestCompleted (ecm/widget/layout/AdminPane.js:9759)
可能的原因及修复步骤
1. 插件plugin.xml中配置类路径错误或缺失
ICN在展示插件详情时,会尝试实例化你在plugin.xml中指定的配置类。如果这个配置类不存在、路径写错,或者没有正确定义,就会抛出cls is not a constructor错误。
修复方法:
- 打开你的
plugin.xml,如果不需要自定义配置界面,也需要添加指向ICN默认配置类的标签:<configClass>ecm/widget/admin/PluginConfigurationPane</configClass> - 如果有自定义配置类,确保
<configClass>的路径是正确的AMD模块路径,比如你的配置类文件是myplugin/config/MyConfig.js,那么标签应该写:<configClass>myplugin/config/MyConfig</configClass>
2. 自定义配置类的AMD模块定义错误
如果你的配置类没有正确用Dojo的declare定义并导出构造函数,ICN加载时就无法识别它为构造函数。
修复方法:
确保你的配置类JS文件符合Dojo AMD规范,正确继承ICN的PluginConfigurationPane,并返回构造函数。示例代码如下:
define([ "dojo/_base/declare", "ecm/widget/admin/PluginConfigurationPane" ], function(declare, PluginConfigurationPane) { return declare("myplugin.config.MyConfig", [PluginConfigurationPane], { postCreate: function() { this.inherited(arguments); // 这里可以添加自定义配置UI元素,不需要的话留空即可 } }); });
3. 配置类的依赖未正确声明
如果你的自定义配置类依赖其他模块,但没有在plugin.xml中声明这些依赖,会导致模块加载失败,进而cls变成undefined。
修复方法:
在plugin.xml的<dependencies>标签下添加配置类依赖的模块,比如:
<dependencies> <dependency>ecm/widget/admin/PluginConfigurationPane</dependency> <!-- 其他自定义依赖也需要添加在这里 --> </dependencies>
4. 检查配置类文件是否成功加载
打开浏览器开发者工具的Network标签,搜索你的配置类JS文件,看是否返回404错误。如果是,说明你的模块路径配置错误,需要修正plugin.xml中的<configClass>路径或者文件的实际存放位置。
验证修复
完成上述调整后,重新打包部署插件,再进入ICN的插件管理界面:
- 控制台不会再抛出
cls is not a constructor错误 - 点击插件的"详情"按钮,就能看到类似AFP Viewer插件的详情信息了
内容的提问来源于stack exchange,提问作者Garet Jax

