On Wednesday, October 12, 2016 at 5:34:36 PM UTC+1, Peter Damoc wrote:
>
> On Wed, Oct 12, 2016 at 6:57 PM, 'Rupert Smith' via Elm Discuss <
> [email protected] <javascript:>> wrote:
>
>> This limitation means you can't have UI elements defined outside of a
>> component affect its state. Suppose you had a video component and a video
>> control bar compnent, you could not make those separate components, you'd
>> always have to embed the control bar inside the video component.
>>
>
> To my understanding, Html elements are treated as stateless so, there is
> no semantic to tell a certain Html element anything just like you cannot
> tell the integer number 42 to do something. It's just data. It's not an
> object.
>
> If someone wants to say something to the actual html element, they have to
> give that element an ID in Elm and go to JS in order to give it a message.
>
Right, that is good point. State must always go on the model.
Sticking with my video controller analogy - suppose we put the "pause :
Bool" on the model, then the onClick action can simply set the state there.
Perhaps you could define a record visible in the components API, that holds
all of its state that can be modified from the outside. I wonder what
happens though, when the video component is re-built from this model:
type alias Model =
{ ...
, vidState : Video.Model
}
video model.vidstate [ src "http://myvids.com/cute_cats.mpg
<http://www.google.com/url?q=http%3A%2F%2Fmyvids.com%2Fcute_cats.mpg&sa=D&sntz=1&usg=AFQjCNGiW_qrqfzOjZaj4nXSwqtxzPhI2w>"
]
[ videoControl [] [ button [ onclick Pause ] [ text "pause" ] ] ]
Presumably the change to the state would cause a brand new video control to
be rendered and lose internal state like which point in the video you were
currently watching?
Still, I quite like the idea of making any externally accesible state an
explicit type in the Elm program, even if the above approach were combined
with a ComponentId and a helper function using a port to set state on the
component; at least from the point of view of the Elm program we are
keeping state in the model not the Html component.
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.