2

elm では、次のようにフラグを elm アプリケーションに渡すことができます。

HTML/JS

  <div id="elm"></div>
  <script>
var app = Elm.Main.init({
  node: document.getElementById('elm'),
  flags: Date.now()
});
  </script>

次に、elm アプリは init でパラメーターを取得します。

init : Int -> ( Model, Cmd Msg )
init currentTime =
  ...

私は寓話のドキュメントを読んできましたが、同じことをどのように達成できるかは明確ではありません。

init 関数でパラメーターを送信するオプション Program.runWith があることがわかりますが、ドキュメントが見つからず、コンパイルされた JavaScript から、html ファイルからメイン関数を呼び出す方法がわかりません。

寓話では、htmlファイルで次のようなことができるようにしたいのですが、「Program.Run ..」が何であるかはわかりません。

<body>
    <div id="elmish-app" class="elmish-app"></div>
    <script src="bundle.js"></script>
    <script>
        Program.Run({time: Date.now()});
    </script>
</body>

ありがとう

4

2 に答える 2

0

Maxime Mangel からの以前の回答から構築しただけで、ハッキーなアプローチを採用しましたが、ローカル ストレージを利用するために少し適応させました。これは、開始前に設定/収集された Fable-Elmish アプリに Args を渡す方法を見つける必要がある他の人のための代替手段です。

App.fs (最後に実行/コンパイルされたファイル):

let initialArgs = {
    Sender = Browser.Dom.window.localStorage.getItem("Sender")
    HubConnectionURI = Browser.Dom.window.localStorage.getItem("ServiceURI")}

let startApplication args = 
    Program.mkSimple init update view
    |> Program.withReactSynchronous "elmish-app"
    |> Program.withSubscription Subscription.hubConnection
    |> Program.withConsoleTrace
    |> Program.runWith args

do startApplication initialArgs

これは、アプリの初期化の前にブラウザで設定されたローカル ストレージ値から取得されるため、必要に応じてこれらを JS で設定できます。

index.html 内:

<body>
    <div id="elmish-app" class="elmish-app"></div>
    <script>
      window.localStorage.setItem('Sender', 'Chairman Meow')
      window.localStorage.setItem('ServiceURI', 'http://localhost:7071')
    </script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/3.1.3/signalr.min.js"></script>
    <script src="bundle.js"></script>
</body>

もちろん、これを適応させることはできますが、ローカル ストレージに設定されている値/変数を取り込みたいと考えていました。プログラムの実行で開始したいサブスクリプションをパラメーター化するために、これらの「動的な」初期引数が必要でした。これを、Fable-Elmish で SignalR を使用するために取り組んでいるデモに使用しています。これらはページの読み込み時に。

ただし、ここでのポイントは、値がアプリの開始前にローカル ストレージに設定されている限り、値を取得したいことは何でもできるということです。これは比較的「よりクリーンなハック」だと思いますが、まだ Fable-Elmish の初心者であり、より良いアプローチがある可能性があります。

[これらが初期モデルの一部であることをさらに明確にするために強調したい]

于 2020-05-11T22:11:42.410 に答える