I am using elm 0.17.1 and trying to interact with select2 javascript library (version 4.0.3), here is my Main.elm:
port module Main exposing (..)
import Html exposing (Html,select,option,div,text,br)
import Html.App as App
import Html.Attributes exposing (id,value,width)
type alias Model =
{
country : String
}
type Msg =
Select String
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
Select str -> (Model str,Cmd.none)
view : Model -> Html Msg
view model =
div[]
[
select [id "myselect"]
[
option [value "US"] [text "United States"],
option [value "UK"] [text "United Kingdom"]
],
text model.country
]
port selection : (String -> msg) -> Sub msg
subscriptions : Model -> Sub Msg
subscriptions _=
selection Select
port issueselect2 : String -> Cmd msg
init : (Model, Cmd Msg)
init =
({country=""},issueselect2 "myselect")
main : Program Never
main = App.program {init=init,view=view,update=update,subscriptions=subscriptions}
and javascript side:
$(document).ready(function()
{
var app=Elm.Main.fullscreen();
app.ports.issueselect2.subscribe(function(id)
{
$('#'+id).select2().on('change',function(e)
{
app.ports.selection.send(e.target.value);
});
})
})
Right now, when I select a country, an error like Uncaught appears in my Chrome console, saying that domNode.replaceDatait is not a function (in fact it is undefined).
The problem is that select2 adds span to the DOM, and Elm is not aware of this, checking domNodeshows that Elm is trying to update spanwhen it should update the text.
I suppose I need effects, but I don’t know how to use them in my particular utility.
How to solve my problem?
, jquery 3, elm main.js, js : jquery.min.js, select2.min.js, main.js, js.
elm-, , js.