首页 > 解决方案 > Elm:从 Browser.element 切换到 Browser.application - JS 端需要进行哪些更改?

问题描述

最近在我的 Elm 应用程序中出现了操作 URL 的需求,因此根据文档,我不得不从Browser.element基于 - 的方法更改为Browser.application. 这需要进行一些更改,包括我的view函数必须更改为返回带有 atitle和 abody字段的记录。

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

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

该应用程序继续工作,它没有刹车!目瞪口呆,我去谷歌搜索,发现这篇文章说“...... [body 中的其他元素] 只需要出现在带有 Elm.Main.init 的脚本之后”。在 elm 初始化代码之前,我确实在<script>标签中引用了一些 bootstrap-datepicker js lib!

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

标签: javascriptelm

解决方案


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

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

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

AFAIK 你可能需要flags钥匙。


推荐阅读