问题描述
最近在我的 Elm 应用程序中出现了操作 URL 的需求,因此 according to the docs 我不得不从基于 browser.element
的方法更改为 browser.application
。这需要进行一些更改,包括我的 view
函数,必须对其进行更改才能返回带有 title
和 body
字段的记录。
指南中没有提到更新初始化器 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
键。