从 Elm 0.9 开始,您需要使用Ports从 JavaScript 读取 cookie 并将其传递回 Elm 应用程序。
在我的应用程序中,我执行以下操作。我从 Elm 定义了一个fetchCsrfToken
端口,用于调用读取 cookie 的 JavaScript 函数。然后该函数通过csrfTokenReciever
端口触发对 Elm 的回调。我的 Elm 应用程序通过订阅订阅该事件。
-- Ports.elm
port fetchCsrfToken : () -> Cmd msg
port csrfTokenReciever : (String -> msg) -> Sub msg
-- Main.elm
init : Flags -> Url -> Key -> ( Model, Cmd Msg )
init flags url key =
-- ...
(model, Ports.fetchCsrfToken ())
subscriptions : Model -> Sub Msg
subscriptions model =
Ports.csrfTokenReciever GotCsrfToken
// index.js
app.ports.fetchCsrfToken.subscribe(function (str) {
const value = getCookie('csrftoken')
if (value === null) {
app.ports.csrfTokenReciever.send('')
} else {
app.ports.csrfTokenReciever.send(value)
}
})