Elm:
Tekstitiedoston lukeminen
How to:
Elmissä tiedoston lukeminen tapahtuu yleensä JavaScriptin interaktiivisen toiminnan, kuten FileReader
API:n kautta, käyttäen portaaleja (Elm ports). Tässä esimerkki:
port module Main exposing (..)
-- Määritä portti tiedoston sisällön vastaanottamiseen
port fileContent : (String -> msg) -> Sub msg
type Msg
= ReceiveContent String
-- Aloita tiedoston luku kun portti vastaanottaa datan
subscriptions : Model -> Sub Msg
subscriptions model =
fileContent ReceiveContent
-- Käsittele vastaanotettu tiedoston sisältö
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
ReceiveContent content ->
({ model | fileData = Just content }, Cmd.none)
-- Näytä tiedoston sisältö käyttöliittymässä
view : Model -> Html Msg
view model =
div []
[ case model.fileData of
Just content ->
text content
Nothing ->
text "Ei vielä luettua sisältöä." ]
JavaScriptissä voitaisiin käyttää jotain tällaista synkronoidaksemme Elm-koodin kanssa:
// Liitä HTML-elementissä tapahtuva tiedoston valinta
document.getElementById('file-input').addEventListener('change', function(event) {
var reader = new FileReader();
reader.onload = function(event) {
var contents = event.target.result;
app.ports.fileContent.send(contents);
};
reader.readAsText(event.target.files[0]);
});
Deep Dive
Elmissä ei ole sisäänrakennettua tapaa tiedostojen lukemiselle, koska se keskittyy puhtaiden funktionaalisten paradigmojen noudattamiseen ja sivuvaikutusten minimoimiseen. Historiallisesti tiedostojen käsittely on tapahtunut JavaScript-rajapinnan kautta, mitä kutsutaan portaaleiksi (ports). Vaihtoehtoisesti tiedoston lukemisen voisi hoitaa myös palvelimella, josta data siirretään HTTP:n avulla.
Vaikka Elm tarjoaa hyvän perustan frontend-sovelluksille, tiedoston lukemista on käsiteltävä JS:n maailmassa, koska se on selaimelle ominaista toiminnallisuutta. Se tarkoittaa sitä, että tietyt toiminnallisuudet ovat sovelluskehyksen ulkopuolella.
See Also
- Elm Portaaleista: https://guide.elm-lang.org/interop/ports.html
- FileReader API: https://developer.mozilla.org/en-US/docs/Web/API/FileReader
- Elm ja HTTP: https://package.elm-lang.org/packages/elm/http/latest/