ClojureScript使用Bootstrap datetimepicker extern.js配置无效报错如何解决
配置错误原因
你当前的extern.js仅声明了jQuery的静态方法datetimepicker,但你实际调用的是jQuery实例对象的原型方法,该方法挂载在$.prototype对象上,未对外声明的原型方法名仍然会被Closure Compiler高级优化混淆为随机字符串,对应报错里的Bk,所以问题没有解决。
正确extern.js配置
修改你的extern.js为以下内容即可:
var $ = function (arg1, arg2) {}; // 保留原有需要的原型方法声明 $.prototype.val = function(arg1) {}; // 新增datetimepicker实例方法声明 $.prototype.datetimepicker = function(options) {}; // 以下为非必要内容,如果你没有用到对应场景可以删除 var selectpicker = function() {}; $.datetimepicker = function(arg1) {}; var datetimepicker = function() {};
额外注意事项
- 确认你的ClojureScript构建工具(如shadow-cljs、lein-cljsbuild)的配置中已经正确引入该extern.js文件,路径配置无误
- 清理构建缓存后重新编译项目,避免旧编译产物干扰
临时规避方案(无需修改extern)
如果不想维护extern文件,可以用字符串形式调用方法绕开混淆:
;; 方式1:通过aget获取方法后调用 (.call (aget (js/$ "#dateid") "datetimepicker") (js/$ "#dateid")) ;; 方式2:直接内嵌原生JS代码 (js* "$(\"#dateid\").datetimepicker()")
内容的提问来源于stack exchange,提问作者HPK
相关产品推荐
相关产品推荐

