Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Elm中访问窗口对象?_Elm - Fatal编程技术网

如何从Elm中访问窗口对象?

如何从Elm中访问窗口对象?,elm,Elm,具体地说,我试图用一个已经定义的参数初始化Elm。比如: initialModel = { me = window.user , todos = window.todos } 我所能找到的就是如何使用信号获取窗口尺寸,但我使用的是Elm 0.18,它似乎有点过时 编辑:为了澄清,上面的代码不起作用。任何附加到窗口对象的内容都必须是JS,因此它必须经过解码器。您需要使用从javascript传递初始值。如果要使用Elm的自动类型转换,则从javascript传递的标志应具

具体地说,我试图用一个已经定义的参数初始化Elm。比如:

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转换对于您的解码来说不够强大,那么您可以使用该类型作为您的标志,然后使用您的客户解码器

这太棒了。非常感谢你。