javascript - 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?也许榆树指南也应该更新以包含此类信息。
解决方案
这样做的原因是 Elm 初始化程序检查它需要的记录并忽略任何其他记录。就好像你传入一样:
var app = Elm.Main.init({
foobar: null
});
(这是因为 JS 不像 Elm 那样进行类型检查,所以对象可以有相当任意的形状)
AFAIK 你可能需要flags
钥匙。
推荐阅读
- macos - Docker Machine 实例的主机上的 Docker 套接字
- javascript - 如何用 knex 重写原始 sql 查询?
- flutter - Flutter:Hero 小部件、Navigation 2.0 和 Provider 不能一起正常工作
- mongodb - 在 Mongodb 中获取单个文档的大小?
- reactjs - 传递多个参数后调用两次 useEffect
- python - 使用 Python 将标题添加到 CSV 文件
- swift - 带双引号的 Alamofire 标头
- node.js - 如何检查我的机器人是否可以在 discord.js v12 中添加角色?
- reactjs - Componentdidmount:获取请求并设置状态
- javascript - 我应该在 react-native 项目中将firebase初始化放在哪里?