如何从Elm中访问窗口对象?
具体地说,我试图用一个已经定义的参数初始化Elm。比如:如何从Elm中访问窗口对象?,elm,Elm,具体地说,我试图用一个已经定义的参数初始化Elm。比如: initialModel = { me = window.user , todos = window.todos } 我所能找到的就是如何使用信号获取窗口尺寸,但我使用的是Elm 0.18,它似乎有点过时 编辑:为了澄清,上面的代码不起作用。任何附加到窗口对象的内容都必须是JS,因此它必须经过解码器。您需要使用从javascript传递初始值。如果要使用Elm的自动类型转换,则从javascript传递的标志应具
initialModel =
{ me = window.user
, todos = window.todos
}
我所能找到的就是如何使用信号获取窗口尺寸,但我使用的是Elm 0.18,它似乎有点过时
编辑:为了澄清,上面的代码不起作用。任何附加到窗口对象的内容都必须是JS,因此它必须经过解码器。您需要使用从javascript传递初始值。如果要使用Elm的自动类型转换,则从javascript传递的标志应具有等效的记录类型:
假设me只是一个字符串,但TODO是一个布尔标志和标签列表。您的标志类型可能如下所示:
输入别名Todo=
{done:Bool,label:String}
键入别名标志=
{me:String,Todo:List Todo}
init函数需要适当地处理flags值。以下是将字段分配给同名模型字段的示例:
类型别名模型=
{me:String,Todo:List Todo}
主:程序标志模型消息
主要=
Html.programWithFlags
{init=init
,视图=视图
,update=update
,订阅=\ \->Sub.none
}
初始化:标志->模型,Cmd Msg
初始化标志=
{me=flags.me,todos=flags.todos}![]
您的javascript需要更新才能传入标志。您可以将json对象作为第一个参数传递给fullscreen或embed:
var app=Elm.Main.fullscreen{
我:约翰·多伊,
待办事项:[
{完成:正确,标签:做这件事},
{完成:错误,标签:这件事}
]
};
这是一个
如果Elm的自动json-to-mapping转换对于您的解码来说不够强大,那么您可以使用该类型作为您的标志,然后使用您的客户解码器 这太棒了。非常感谢你。