Take a look at
`Html.App.programWithFlags`:
http://package.elm-lang.org/packages/elm-lang/html/1.0.0/Html-App#programWithFlags
I'm pretty sure it was created with the 0.17 release specifically for this
purpose -- to import arbitrary data on initialization. Would probably be
cleaner than `setTimeout`!
On Monday, June 6, 2016 at 9:09:43 PM UTC-4, Jaroslaw Zabiello wrote:
>
> It looks, like I can have 0 delay with setTimeout and it works. :)
>
> const app = Elm.Main.embed(document.querySelector('#app')\);
> setTimeout(function () {
> // Elm is ready to receive data
> app.ports.loadData.send(window.__DATA);
> }, 0);
>
>
> On Tuesday, June 7, 2016 at 1:57:00 AM UTC+1, Jaroslaw Zabiello wrote:
>>
>> I need to import some initial data from JS to Elm as fast as possible,
>> just after Elm app is embed to HTML page. The problem is I don't know how
>> much time I need for Elm to be ready for port communication from JS to Elm.
>> Definitely it can't be done just after mounting Elm to the page.
>>
>> The one solution would be delaying the transmission with SetTimeout like:
>>
>>
>> const elmDiv = document.querySelector('#app');
>> const elmApp = Elm.Main.embed(elmDiv);
>>
>> setTimeout(function () {
>> elmApp.ports.loadData.send(window.__DATA);
>> }, 1000);
>>
>>
>> But I don't like to use arbitrary, artificial delay in the communication.
>>
>> The another solution would be sending IsReady message from Elm to JS
>> first, subscribe to it, and from the subscription start sending data back
>> to Elm.
>>
>> elmApp.ports.isReady.subscribe(function() {
>> elmApp.ports.loadData.send(window.__DATA);
>> });
>>
>> Is there any other way? A kind of callback to notify Elm is mounted and
>> ready for receiving data?
>>
>> Elm.Main.embed(elmDiv, function () {
>> // Elm is ready for receiving data from JS
>> this.port.loadData.send(myData);
>> })
>>
>>
--
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.