在您必须准备带有导出到 Opa 的 JS 值的特殊文件之前,该文件带有特殊注释,例如:
##register value_name : type_of_arg1, type_of_arg2 -> void
##args(arg1, arg2)
{
run_someJS_code();
}
该文件必须使用特殊工具编译到包中,然后在 Opa 中使用%%Filename.value_name%%(x,y)
.
现在用 Opa 类型标记 JS 值并将它们标记为导出到 Opa 是在注释语法中的 JS 源文件中/** */
。这些文件仍然是有效的 JS 文件,因此您可以就地更新现有的 JS 文件。它们也不需要特殊的工具来编译它们。标准 Opa 编译器接受 JS 文件作为任何其他 Opa 文件并理解注释中的注释。和以前一样,您以完全相同的方式链接客户端 JS 和服务器 Node.js 代码。
不幸的是,由于大多数高级 Opa 功能的文档很少,您必须阅读标准库资源来学习它。可用的基本功能如下:
bslLeaflet.js:
// These are the native JS "types" that will be available in Opa
/** @externType leaflet_map */
/**
* @register {string, float, float, int, bool, bool -> leaflet_map}
*/
function leafletMap(id, center_lat, center_lon, zoom, zoomControl, attributionControl) {
return L.map(id, {center:[center_lat, center_lon], zoom:zoom, zoomControl:zoomControl, attributionControl:attributionControl});
}
我的地图.opa:
type leaflet_map = external
leaflet_map map = %%BslLeaflet.leafletMap%%("my_map_id", lat, lon, 14, true, true)
尽管现在做简单的事情非常容易和快速,但要学习以下内容:
- 继续运行 JS 函数,
- 在 JS 中使用 Opa 类型(你可以使用自定义 Opa 记录吗?),
- 使用列表类型的参数(从 Opa
{hd,tl} or {nil}
到 JS 列表的转换是否像 Opabool={true} or {false}
到 JS一样自动执行boolean
?),
- 运行作为参数传递给 JS 函数的 Opa 函数,
需要一些实验。如果你能理解其中的一些,写一些关于它的东西,因为我也会很高兴学习它:)