Khai báo không gian tên giống nhau bất kể bạn đang sử dụng trình biên dịch chế độ đơn giản hay nâng cao. Sự khác biệt là các thư viện không tham gia quản lý phụ thuộc của google qua số goog.require('')
và goog.provide('')
cần được tham chiếu một cách dễ dàng thông qua tệp externs.js
. Tệp này, mà bạn chuyển tới trình biên dịch cljs, cung cấp các nhánh của tất cả các vars và các phương thức liên quan. Một điển hình externs.js
sẽ giống như thế:
// contents of externs.js
var externalLibrary = {}
var externalLibrary.method = function() {}
Vì vậy, để tham khảo một google đóng cửa thư viện biết khai gian tên của bạn trông như thế này:
(ns my.namespace
(:require [goog.events.KeyCodes :as key-codes])
Và đó phát ra javascript sau:
goog.provide("my.namespace");
goog.require("goog.events.keycodes");
Lưu ý rằng nếu bạn muốn gọi closurescript của mình từ một tệp javascript khác thì bạn cần phải gắn thẻ phương thức như đã xuất để trình biên dịch tối ưu hóa biết s để bảo tồn tên. (Ví dụ như bạn có thể có một thẻ script trên một trang từ nơi bạn muốn gọi một hàm javascript đã được tạo ra từ clojurescript)
Đó trông như thế này:
(defn ^:export externallyCalled [])
Điều khác phải nhận thức được là bạn phải đối xử với các macro khác nhau trong clojurescript, điều này là do khả năng xử lý chúng 'khi đang di chuyển' trong trình đọc không có mặt theo cách giống như trong clojure.
bạn làm điều đó như sau (lưu ý rằng bạn có nghĩa vụ ràng buộc các macro với: như trong trường hợp này)
(ns my.namespace
(:require-macros [my.macros :as my]))
Nếu bạn đang gọi mã mà không tham gia quản lý phụ thuộc google của bạn truy cập vào nó thông qua không gian tên js
và javascript interop ...
(. js/nonGoogle (method args)) ; a method access
(. js/nonGoogle -p) ; a property access
tất cả các thông thường. các biến thể cũng hoạt động ..
là: tùy chọn được hỗ trợ cho: sử dụng? cũng có nghĩa vụ phải là một vectơ trong ví dụ: requre-macros? Ngoài ra, bạn có thể đưa ra một ví dụ với các bản đồ google hoặc biểu đồ api? – bmillare
@bmillare cả hai sản phẩm khai thác tốt. Tôi đã sửa câu trả lời. Cảm ơn (nhiều trì hoãn) – sw1nn