JavaScript 交互

现在我们已经了解了Elm 架构类型命令订阅,我们甚至已经在本地安装了 Elm。

但是当您需要与 JavaScript 集成时会发生什么?也许有一个浏览器 API,但尚未有相当于的 Elm 包。也许您希望在 Elm 应用程序中嵌入 JavaScript 小组件?等等。本章将概述 Elm 的三种交互机制

在我们了解这三种机制之前,我们需要知道如何将 Elm 程序编译为 JavaScript!

注意:如果您正在评估在工作场所使用 Elm,我建议您确保这三种机制能够满足您的所有需求。通过查看这些 示例,您可以快速概述本章。如果您不确定某些内容,请 在此提问,如果您不太确信,我建议您稍后回来了解 Elm。

编译为 JavaScript

默认情况下,运行 elm make 会生成 HTML 文件。因此,如果您说

elm make src/Main.elm

这样会生成一个 index.html 文件,您只需打开该文件即可开始使用。如果您正在深入了解 JavaScript 交互,您需要生成 JavaScript 文件

elm make src/Main.elm --output=main.js

这样会生成一个 JavaScript 文件,其中展开了 Elm.Main.init() 函数。因此,一旦您有了 main.js,就可以编写一个执行任何所需操作的 HTML 文件。

嵌入 HTML

以下是最小化所需的 HTML 代码,以便您的 main.js 可以在浏览器中显示

<html>
<head>
  <meta charset="UTF-8">
  <title>Main</title>
  <script src="main.js"></script>
</head>

<body>
  <div id="myapp"></div>
  <script>
  var app = Elm.Main.init({
    node: document.getElementById('myapp')
  });
  </script>
</body>
</html>

我想提请您注意此处的重点

  • <head> - 我们有一行加载我们编译的 main.js 文件。这是必需的!如果你编译一个名为 Main 的 Elm 模块,你将在 JavaScript 中获得一个 Elm.Main.init() 函数。如果你编译一个名为 Home 的 Elm 模块,你将在 JavaScript 中获得一个 Elm.Home.init() 函数。等等。

  • <body> - 我们需要在这里做两件事。首先,我们创建一个 <div>,我们希望我们的 Elm 程序接手。也许它在一个更大的应用程序中,周围环绕着大量其他内容?这很好!其次,我们有一个 <script> 来初始化我们的 Elm 程序。在这里我们调用 Elm.Main.init() 函数来启动我们的程序,传递我们希望接管的 node

现在我们知道了如何在 HTML 文档中嵌入 Elm 程序,是时候开始探索三个互操作选项了:flags、ports 和 custom elements!

注意:这是一个正常的 HTML 文件,所以你可以放入任何你想要的东西!许多人在 <head> 中加载其他 JS 和 CSS 文件。这意味着完全可以手动编写你的 CSS 或通过某种方式生成它。在你的 <head> 中添加类似 <link rel="stylesheet" href="whatever-you-want.css"> 的东西,你就可以访问它。(有一些非常棒的选项可以完全在 Elm 指定你的 CSS,但那是另一个话题!)

匹配 "" 的结果

    没有匹配 "" 的结果