Hi, I am currently struggling with port subscriptions in a submodule 
(`Part`)
reused multiple times in a bigger (`Group`) module like:

-- In Group.elm
type alias Model =
  { parts : Array Part.Model }

I've been using the following "batching" technique (here are the relevant 
parts of 3 files: Part.elm, Ports.elm, Group.elm)

-- Part.elm

type Msg
 = PortMsg (Some, Values)

update msg model =
 case msg of
   PortMsg (some, values) -> (...) -- using Debug.log here to see how many 
times this is called

subscriptions : Model -> Sub Msg
subscriptions model =
   Ports.portFunction PortMsg


-- Ports.elm

port portFunction : ((Some, Values) -> msg) -> Sub msg


-- Group.elm

type alias Model =
 { parts : Array Part.Model }

type Msg
 = PartMsg Int Part.Msg

subscriptions : Model -> Sub Msg
subscriptions model =
Sub.batch
  <| Array.toList <| Array.indexedMap (Sub.map << PartMsg) (Array.map 
Part.subscriptions 
model.parts)


The problem I face is that when a Sub Msg is processed, the updates of all 
the parts are triggered instead of just the only one
that should be subscribing to the msg (I verified it with the `Debug.log` 
mentionned in the code).
This means that if I have 10 parts in the group, it will trigger the update 
function of the right part and also of the 9 other parts that should not be 
updated with this sub msg.
This is a huge efficiency problem in addition to potentially modifying my 
models incorrectly if I don't care somehow in the update function.

I fear I have come to this issue by design flaws since I'm not finding a 
way to overcome it.
Does anyone have an idea of what I'm doing wrong ?

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to