Elm:从 Browser.element 切换到 Browser.application - JS 方面需要进行哪些更改?

问题描述

最近在我的 Elm 应用程序中出现了操作 URL 的需求,因此 according to the docs 我不得不从基于 browser.element方法更改为 browser.application。这需要进行一些更改,包括我的 view 函数,必须对其进行更改才能返回带有 titlebody 字段的记录。

指南中没有提到更新初始化器 JS 代码,我预计这会破坏我的应用程序,因为它仍然像这样初始化:

var app = Elm.Main.init({
  node: document.getElementById('elm')
});

该应用程序继续运行,但没有停止运行!目瞪口呆,我去谷歌搜索,发现 this article 说“...... [body 中的其他元素] 只需要出现在带有 Elm.Main.init 的脚本之后”。我确实在 <script> 标记中引用了一些 bootstrap-datepicker js lib before elm 初始化代码

这里有什么交易?我担心我碰巧有一些认行为。 browser.application 如何接管 body 标签?初始化基于 browser.application 的 Elm 应用程序的正确方法是什么,该应用程序还必须在 html 正文中包含自定义 javascript? 也许应该更新榆树指南以包含此类信息。

解决方法

这样做的原因是 Elm 初始化程序检查它需要的记录并忽略任何其他记录。和你传入一样:

var app = Elm.Main.init({
  foobar: null
});

(这是因为 JS 不像 Elm 那样进行类型检查,所以对象可以有相当任意的形状)

AFAIK 您可能需要 flags 键。