Elmのbody要素にイベントハンドラーを追加するにはどうすればよいですか?

みのる

を試していHtml.App.beginnerProgramますonKeyDownが、<body>要素にイベントハンドラー(など)を追加したいと思います

残念ながら、私が入れたものはすべてviewの子になり<body>ます。Html.bodyから戻っviewもうまくいきません。このコード:

main = beginnerProgram { model = 0, view = view, update = update }

view model = body [] []

update _ model = model

生成されます:

<html>
    <head>...</head>
    <body>
        <body></body>
    </body>
</html>

では、どうすれば<body>要素を制御できますか?

チャドギルバート

Elmはの子孫としてレンダリングされるため<body/>、通常のElmの方法(例button [ onClick SomeMsg ] []でイベント処理をバインドすることはできません代わりに、ポートを使用する必要があります。また、ポートとサブスクリプションを使用しているため、Html.App.programではなくを使用する必要がありますbeginnerProgram

ポートモジュール内にポート関数が必要です。

port bodyKeyPress : (String -> msg) -> Sub msg

そして、javascriptからそのポートにキー押下を送信できるようになります。

app.ports.bodyKeyPress.send(...);

完全な例を次に示します。

Main.elm

port module Main exposing (main)

import Html.App as App
import Html exposing (..)

main = App.program
  { init = init
  , update = update
  , view = view
  , subscriptions = subscriptions
  }

type alias Model = { message : String } 

type Msg = BodyKeyPress String

init = { message = "Press some keys: " } ! []

update msg model =
  case msg of
    BodyKeyPress c ->
      { model | message = model.message ++ c } ! []

view model = text model.message

subscriptions _ =
  bodyKeyPress BodyKeyPress

port bodyKeyPress : (String -> msg) -> Sub msg

そして、舞台裏のhtml(を使用して構築したと仮定elm make Main.elm --output=Main.js):

<html>
  <body>
    <script src="Main.js"></script>
    <script>
      var app = Elm.Main.fullscreen();

      document.body.onkeypress = function(e) {
        app.ports.bodyKeyPress.send(String.fromCharCode(e.keyCode));
      };
    </script>
  </body>
</html>

送信するすべてのボディイベントのポート関数を作成して処理する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ElmのキャンバスシェイプにonClickイベントハンドラーを追加するにはどうすればよいですか?

分類Dev

HTMLを制御できない場合に、要素にイベントハンドラーを追加するにはどうすればよいですか?

分類Dev

単純なonClickイベントハンドラーをキャンバス要素に追加するにはどうすればよいですか?

分類Dev

onClickイベントハンドラーをcanvas要素(arc)に追加するにはどうすればよいですか?

分類Dev

コントロールのEventHandlerListにイベントハンドラーを適切に追加するにはどうすればよいですか?

分類Dev

Vueループの最初のアイテムにイベントハンドラーを追加するにはどうすればよいですか?

分類Dev

Minecraft Forgeのブロックレバーにイベントハンドラーを追加するにはどうすればよいですか?

分類Dev

複数のタブクローズイベントハンドラーをJavaFXタブに追加するにはどうすればよいですか?

分類Dev

@ContentChildrentからイベントハンドラーを取得するにはどうすればよいですか?

分類Dev

@ContentChildrentからイベントハンドラーを取得するにはどうすればよいですか?

分類Dev

Reactのconst内にイベントハンドラーを追加するにはどうすればよいですか?

分類Dev

別のハンドラーからangularjsイベントハンドラーをトリガーするにはどうすればよいですか?

分類Dev

スペースキーをリッスンするキーイベントハンドラーを追加するにはどうすればよいですか?

分類Dev

イベントハンドラーをモックするにはどうすればよいですか?

分類Dev

タブを更新せずにイベントハンドラーを新しい要素に適用するにはどうすればよいですか?

分類Dev

このイベントハンドラーをjQueryプラグインにバインドするにはどうすればよいですか?

分類Dev

C#コードでToolStripButtonにイベントハンドラーを追加するにはどうすればよいですか?

分類Dev

AD B2Cを使用するときにOnTokenValidatedイベントハンドラーを追加するにはどうすればよいですか?

分類Dev

ブートストラップdatepickerでイベントハンドラーのバインドを解除するにはどうすればよいですか?

分類Dev

レンダーツリービルダーでnavlinkイベントハンドラーを追加するにはどうすればよいですか?

分類Dev

レンダーツリービルダーでnavlinkイベントハンドラーを追加するにはどうすればよいですか?

分類Dev

ボタンを動的に作成し、さまざまなイベントハンドラーを追加するにはどうすればよいですか?

分類Dev

分音記号(アラビア語)にまたがるイベントハンドラーを追加するにはどうすればよいですか?

分類Dev

Axonイベントハンドラー/インターセプターを追加して、ハンドラーに到達する前にイベントをインターセプトするにはどうすればよいですか?

分類Dev

派生抽象クラス内でイベントハンドラーを追加および削除するにはどうすればよいですか?

分類Dev

Angularのbodyタグにイベントを追加するにはどうすればよいですか?

分類Dev

C#で動的ラベルを編集するためのイベントハンドラーを作成するにはどうすればよいですか?

分類Dev

Reactコンポーネント内からBODYにクリックハンドラーを追加するにはどうすればよいですか?

分類Dev

Reactのイベントハンドラーの外でバインドされた関数を実行するにはどうすればよいですか?

Related 関連記事

  1. 1

    ElmのキャンバスシェイプにonClickイベントハンドラーを追加するにはどうすればよいですか?

  2. 2

    HTMLを制御できない場合に、要素にイベントハンドラーを追加するにはどうすればよいですか?

  3. 3

    単純なonClickイベントハンドラーをキャンバス要素に追加するにはどうすればよいですか?

  4. 4

    onClickイベントハンドラーをcanvas要素(arc)に追加するにはどうすればよいですか?

  5. 5

    コントロールのEventHandlerListにイベントハンドラーを適切に追加するにはどうすればよいですか?

  6. 6

    Vueループの最初のアイテムにイベントハンドラーを追加するにはどうすればよいですか?

  7. 7

    Minecraft Forgeのブロックレバーにイベントハンドラーを追加するにはどうすればよいですか?

  8. 8

    複数のタブクローズイベントハンドラーをJavaFXタブに追加するにはどうすればよいですか?

  9. 9

    @ContentChildrentからイベントハンドラーを取得するにはどうすればよいですか?

  10. 10

    @ContentChildrentからイベントハンドラーを取得するにはどうすればよいですか?

  11. 11

    Reactのconst内にイベントハンドラーを追加するにはどうすればよいですか?

  12. 12

    別のハンドラーからangularjsイベントハンドラーをトリガーするにはどうすればよいですか?

  13. 13

    スペースキーをリッスンするキーイベントハンドラーを追加するにはどうすればよいですか?

  14. 14

    イベントハンドラーをモックするにはどうすればよいですか?

  15. 15

    タブを更新せずにイベントハンドラーを新しい要素に適用するにはどうすればよいですか?

  16. 16

    このイベントハンドラーをjQueryプラグインにバインドするにはどうすればよいですか?

  17. 17

    C#コードでToolStripButtonにイベントハンドラーを追加するにはどうすればよいですか?

  18. 18

    AD B2Cを使用するときにOnTokenValidatedイベントハンドラーを追加するにはどうすればよいですか?

  19. 19

    ブートストラップdatepickerでイベントハンドラーのバインドを解除するにはどうすればよいですか?

  20. 20

    レンダーツリービルダーでnavlinkイベントハンドラーを追加するにはどうすればよいですか?

  21. 21

    レンダーツリービルダーでnavlinkイベントハンドラーを追加するにはどうすればよいですか?

  22. 22

    ボタンを動的に作成し、さまざまなイベントハンドラーを追加するにはどうすればよいですか?

  23. 23

    分音記号(アラビア語)にまたがるイベントハンドラーを追加するにはどうすればよいですか?

  24. 24

    Axonイベントハンドラー/インターセプターを追加して、ハンドラーに到達する前にイベントをインターセプトするにはどうすればよいですか?

  25. 25

    派生抽象クラス内でイベントハンドラーを追加および削除するにはどうすればよいですか?

  26. 26

    Angularのbodyタグにイベントを追加するにはどうすればよいですか?

  27. 27

    C#で動的ラベルを編集するためのイベントハンドラーを作成するにはどうすればよいですか?

  28. 28

    Reactコンポーネント内からBODYにクリックハンドラーを追加するにはどうすればよいですか?

  29. 29

    Reactのイベントハンドラーの外でバインドされた関数を実行するにはどうすればよいですか?

ホットタグ

アーカイブ