代码之家  ›  专栏  ›  技术社区  ›  Jon Raynor

是否可以向100%elm应用程序添加javascript ui元素?

  •  -1
  • Jon Raynor  · 技术社区  · 6 年前

    我有一份elm申请表,运行良好。它有一个导航栏,我们使用标准的elm-ui功能代码构建。有人看到我的应用程序,说你应该使用我们的标准javascript工具栏ui组件。是否可以将javascript ui组件嵌入到100%本地elm应用程序中?

    注意,我们已经在使用端口来调用一些本地javascript函数。我想知道是否可以使用相同的概念来嵌入UI组件,但是既然ELM有它自己的内部渲染,这会有问题吗?

    0 回复  |  直到 6 年前
        1
  •  8
  •   glennsl Namudon'tdie    6 年前

    我不清楚您所说的“javascript ui组件”是什么意思,因为它可以指许多不同的东西,比如react组件或angular组件。但elm确实支持标准 Web Components 通过 Custom Elements

    下面是一个不完整的例子,它看起来像榆树的一面,从 Beginning Elm :

    googleMap : List (Attribute a) -> List (Html a) -> Html a
    googleMap =
        Html.node "google-map"
    
    
    onGoogleMapDrag : Attribute Msg
    onGoogleMapDrag =
        coordinatesDecoder
            |> Json.Decode.map UpdateCenter
            |> on "google-map-drag"
    
    
    view : Model -> Html Msg
    view model =
        googleMap
            [ attribute "latitude" (toString model.center.latitude)
            , attribute "longitude" (toString model.center.longitude)
            , attribute "drag-events" "true"
            , attribute "zoom" "5"
            , onGoogleMapDrag
            ]
            (List.map viewMarker model.markers)
    
        2
  •  4
  •   Mark Bolusmjak    6 年前

    这就是你需要知道的:

    1. elm让我们通过 Html.node
    2. 大多数浏览器(以及更多 a polyfill 允许你创建一个 custom element 使用js渲染自身的。

    所以,你的elm代码说我想 <my-custom-thing customProp="whatever"/> . elm负责将该节点放入dom中,并将其移除。

    您的自定义元素和js负责呈现该节点中发生的内容。

    您的自定义元素可以将事件发送回ELM(例如,HOFER、点击、自定义内容)。

    端口更适合处理。您有要在elm/js之间发送的数据。如果您通过端口向js发送数据,js改变了dom,您可能会遇到问题。