我试图在javascript中创建对象并调用一个方法。方法名称被咀嚼。我试着没有运气地使用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() {};
发布于 2013-11-27 13:33:36
我使用exportSymbol:
(goog/exportSymbol "SceneMain" SceneMain)
(goog/exportSymbol "SceneMain.prototype.handleShow" SceneMain.prototype.handleShow)
它甚至适用于高级优化:
ca("SceneMain",mg);
ca("SceneMain.prototype.handleShow",SceneMain.prototype.Cb);
发布于 2013-11-25 11:09:30
不完全确定你想要达到什么目的。
当您使用没有用谷歌闭包编译器编译的Clojurescript的外部javascript库时,externs.js
是有用的,主要原因是当使用超出空白的优化时,编译器不会破坏外部库。
例如,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() {};
以避免闭包编译器破坏对该对象/函数的调用。
现在,如果您想从Javascript调用Clojurescript函数,可以使用^:export
。
说你有:
(ns test.cljs)
(defn ^:export testfn
[]
(.log js/console "test"))
从javascript您可以:
test.cljs.testfn()
https://stackoverflow.com/questions/20189860
复制相似问题