从Google编辑器中排除函数

时间:2016-08-04 16:27:41

标签: javascript clojure clojurescript google-closure-compiler

我在cljs文件中有以下内容

(defn load-coords []
  (let [svg (.getSVGDocument (. js/document (getElementById "game-board")))
        s (ef/from svg
      :coords "#circles circle"
      (fn [circle]
        {:x (.-baseVal.value (.-cx circle))
         :y (.-baseVal.value (.-cy circle))
         }))]
.....

当我尝试使用:optimisations :advanced编译项目时,在浏览器中运行项目js时出现以下错误消息

  

TypeError:document.getElementById(...)。eh不是函数

似乎.getSVGDocument可能会在编译器中被“破坏”,有什么方法可以“排除”除 externs 之外的其他事情:优化:简单

我甚至不确定如何将它包含在exter中,因为它是js元素规范的一部分......比如我如何在外部写入它?

1 个答案:

答案 0 :(得分:2)

getSVGDocument不是Closure-compiler中的externs的一部分。但是,您可以提供自己的外部来纠正问题。见https://stackoverflow.com/a/21122560/1211524

您需要知道要添加定义的元素类型。例如,如果您想将其添加到HTMLElement类型,它可能类似于:

/**
 * @fileoverview
 * @externs
 */

/**
 * @return {HTMLElement} this should really be SVGElement -
 *    but closure-compiler doesn't recognize that type
 */
HTMLElement.prototype.getSVGDocument = function();