我正在尝试在javascript中创建对象并调用方法。方法名称是munged。我没有运气就试过使用externs.js。
(deftype ^:export SceneMain []
Object
(handleShow [_]
(display-categories)))
;; should be used in javascript as:
var s = new SceneMain();
s.handleShow();
;; Uncaught TypeError: Object [object Object] has no method 'handleShow'
;; Uncaught TypeError: Object #<dg> has no method 'handleShow'
这是我的externs.js
var SceneMain = {};
SceneMain.handleShow = function() {};
答案 0 :(得分:4)
不完全确定你想要在那里完成什么。
externs.js
在您使用Clojurescript的外部javascript库时非常有用,它不是使用Google的Closure编译器编译的,主要原因是当使用超过空格的优化时,编译器不会破坏外部库。< / p>
以MixPanel Javascript api为例。
假设您使用该api具有以下cljs代码:
(defn track
([name data]
(.track js/mixpanel name
(clj->js data)))
([name]
(.track js/mixpanel name)))
您需要在externs.js
var mixpanel = {};
mixpanel.track = function() {};
避免Closure编译器修改对该对象/函数的调用。
现在,如果您想从Javascript调用Clojurescript函数,则使用^:export
即可。
说你有:
(ns test.cljs)
(defn ^:export testfn
[]
(.log js/console "test"))
从你做的javascript:
test.cljs.testfn()
答案 1 :(得分:1)
我使用exportSymbol:
(goog/exportSymbol "SceneMain" SceneMain)
(goog/exportSymbol "SceneMain.prototype.handleShow" SceneMain.prototype.handleShow)
即使使用高级优化也能正常工作:
ca("SceneMain",mg);
ca("SceneMain.prototype.handleShow",SceneMain.prototype.Cb);