ClojureScript

Google Closure 库

ClojureScript 项目始终自动包含 Google Closure 库,这是一个由 Google 构建并在其许多产品(Gmail、Docs 等)中使用的庞大库。它提供了用于 DOM 操作、服务器通信、动画、数据结构、单元测试、富文本编辑和 UI 小部件/控件的低级实用程序。

先尝试包装库!

您可能首先需要考虑以下 ClojureScript 库,它们封装了来自 Google Closure 库的一些功能。它们的源代码也是直接使用 Closure 的好例子。

ClojureScript 包装器 Closure 库

cljs-time

goog.date

cljs-http

goog.net.XhrIo, goog.uri

cljs-ajax

goog.net.XhrIo, goog.uri, goog.json

cuerdas

goog.string

glögi

goog.log

* 包含在 ClojureScript 的核心库中

直接使用 Google Closure

一些有帮助的博客文章

要在 ClojureScript 代码中使用 Google Closure,规则是使用

  • :import 用于 Closure 类(它们也是命名空间,例如 goog.Uri)和枚举

  • :require 用于其他所有内容

导入类

这仅适用于您想直接引用也是命名空间的类,否则只需在您的 ns 表单中使用 :require 或使用 require REPL 助手。

(ns example.core
  (:import goog.Uri))
;; in REPL
(import 'goog.Uri)
(Uri. "http://example.com")
;;=> #<http://example.com>

导入枚举

(ns example.core
  (:import [goog.events EventType]))
;; in REPL
(import '[goog.events EventType])
EventType.CLICK
;;=> "click"

需要函数

(ns example.core
  (:require [goog.math :as math]))
;; in REPL
(require '[goog.math :as math])
(math/clamp -1 0 5)
;;=> 0

有时在需要其父命名空间时,符号不会自动包含。当这些符号位于它们自己的文件中并需要特定包含时,就会发生这种情况

(ns example.core
  (:require
    [goog.string :as gstring]
    goog.string.format))
;; in REPL
(require '[goog.string :as gstring])
(require 'goog.string.format)

(goog.string.format "%05d" 123)
;;=> 00123

;; or use the alias
(gstring/format "%05d" 123)
;;=> 00123

搜索示例

您可以在 Github 上查找使用 goog.domcljs 文件,使用以下搜索

Search GitHub: "goog.dom extension:cljs"

或者,您可以在 Github 上搜索 Google Closure 库,查找与它可能拥有的函数相关的关键字

Search Closure Library on Github: "hours minutes"