2016-10-20 19 views
0

私はElmにシングルページアプリケーションを書いています。ページがレンダリングされた後、何らかのイベントによっていくつかの要素のプロパティを変更する必要があります。ページがレンダリングされた後にElmのHTML要素を変更するには?

たとえば、divにクラスが割り当てられていて、ページ上のボタンが押されたときにtoggleclassListとしたいとします。エルムのネイティブ構造だけではどうすればいいですか?

「古い良い」JavaScriptとElmポートを使用することで、このような目標を達成できることは分かっていますが、「外部」JavaScriptポートとElmポートを使用しないでElmだけを使用する方法がありますか?

  1. すべてのページは、エルムによってレンダリングに構成されているいくつかのコメントの後に更新

    、ない「外部」のJavaScriptコード。

  2. すべてのページを再描画せずに、HTML要素だけを更新したいと思います。
+0

修正したいdivがElmコードで生成されているのか、それともElmマウントポイント外に存在していますか? –

+0

@ChadGilbert divはElm(ページの残りの部分と同様)によって生成され、アプリケーションの外部にJavaScriptコードはありません。 – fycth

答えて

3

view関数を返す divは、モデルに応じて適切なクラスで構成できます。

例次の例では、モデル が1の場合、divはクラス「黒」を取得します。 clickイベントは、モデルを更新します。

-- UPDATE 
type Msg 
    = ToggleColor 

update : Msg -> Model -> (Model, Cmd Msg) 
update msg model = 
    case msg of 
    ToggleColor -> (if model == 0 then 1 else 0, Cmd.none) 

-- VIEW 
view : Model -> Html Msg 
view model = 
    let 
    classAttributes = classList [("black", model == 1)] 
    in div [ classAttributes, onClick ToggleColor ] [ text "test" ] 
+0

私が理解する限り(私は誤解されるかもしれませんが、申し訳ありません)、この場合、HTML要素だけでなく、ページ全体を再レンダリングする必要があります。もしそうなら、要素だけを更新し、ページ全体を再レンダリングしない方法はありますか?ありがとう! – fycth

+6

いいえ、Elmはページの必要な部分だけを更新します。 http://elm-lang.org/blog/blazing-fast-htmlを参照してください。 – Sebastian

関連する問題