La declaración del espacio de nombres es la misma independientemente de si está utilizando la compilación de modo simple o avanzado. La diferencia es que las bibliotecas que no participan en la administración de la dependencia de google a través de goog.require('')
y goog.provide('')
deben ser referenciadas explícitamente a través de un archivo externs.js
. Este archivo, que pasa al compilador de cljs, proporciona stubs de todos los vars y métodos asociados. Un típico externs.js
sería algo como:
// contents of externs.js
var externalLibrary = {}
var externalLibrary.method = function() {}
Así que para hacer referencia a un cierre de la biblioteca cuenta Google su declaración de espacio se ve así:
(ns my.namespace
(:require [goog.events.KeyCodes :as key-codes])
Y que emite el siguiente javascript:
goog.provide("my.namespace");
goog.require("goog.events.keycodes");
Tenga en cuenta que si desea llamar a su script de cierre desde otro archivo javascript, debe etiquetar el método como exportado para que el compilador de optimización sepa s para preservar el nombre. (Por ejemplo, es posible que tenga una etiqueta de secuencia de comandos en una página desde la que desea llamar a una función javascript que se ha generado a partir de clojurescript)
que tiene este aspecto:
(defn ^:export externallyCalled [])
La otra cosa a tener en cuenta es que tienes que tratar las macros de forma diferente en clojurescript, esto es porque la capacidad de procesarlas "sobre la marcha" en el lector no está presente de la misma manera que en clojure.
se hace eso de la siguiente manera (en cuenta que usted está obligado a unir las macros con: como en este caso)
(ns my.namespace
(:require-macros [my.macros :as my]))
Si llama código que no participó en la gestión de la dependencia de Google puede acceder a él a través de la js
espacio de nombres y la interoperabilidad Javascript ...
(. js/nonGoogle (method args)) ; a method access
(. js/nonGoogle -p) ; a property access
todos los habituales. las variantes también funcionan ..
es la opción: como compatible con: uso? también se supone que hay un vector en el ejemplo: requre-macros? Además, ¿podría dar un ejemplo con la API de google maps o charts? – bmillare
@bmillare son buenas capturas. Arreglé la respuesta. Gracias (mucho tarde) – sw1nn