嵌套函数的Clojurescript Extern

时间:2016-04-22 12:57:32

标签: javascript interop clojurescript

我正在使用Clojurescript开发单页应用程序,我想将TinyMCE用作某些字段的WYSIWYG编辑器。为了提高空间效率,我想最终在高级模式下使用google clojure编译器缩小项目。由于tinymce dev javascript文件似乎不适合用作extern文件,因此我不得不自己编写。

有一个特殊的函数调用,我无法工作。在clojurescript中,我打电话给:

(.setContent (.get js/tinymce id) cont)

我认为它会编译成类似的东西:

tinymce.get(id).setContent(cont);

我在外部尝试了很多不同的函数定义,但我一直收到错误:

TypeError: tinymce.get(...).Tl is not a function

这告诉我setContent被编译器遮挡了。我当前的extern文件如下所示:

//all seems to be well here...
var tinymce;
tinymce.get = function(name){};
tinymce.remove = function(node){};
tinymce.init = function(editor){};
tinymce.on = function(name, callback, prepend, extra){};


//tinymce setContent attempts
var tinymce.Editor;
tinymce.Editor.prototype.setContent = function(content){};
tinymce.Editor.setContent = function(content){};
tinymce.get(name).setContent = function(content){};
tinymce.get(name).prototype.setContent = function(content){};

var Editor;
Editor.prototype.setContent = function(content){};
Editor.setContent = function(content){};

目前这种做法是什么,一切都是针对墙壁和看到什么棒的尝试。对象get(name)返回应该在命名空间tinymce.Editor中。

是否有正确的方法来编写外部函数以捕获这些链式函数调用?或者有没有办法重写第一个代码片段,以便我的externs正确保留函数名称?谢谢你提前。

1 个答案:

答案 0 :(得分:0)

这一行:

getClass()
在JS中

在语法上是不正确的:

var tinymce.Editor;

删除它并离开这一行:

SyntaxError: missing ; before statement

这应该可以正常工作。

此外,您可能总是回退到通过字符串文字访问属性,这些文字永远不会被重命名:

tinymce.Editor.prototype.setContent = function(content){};