2017-06-06 18 views
0

ボタンをクリックしても更新機能が呼び出されません(メッセージを送信する必要があります)。ボタンのクリックで更新機能が呼び出されない

はここでonClickイベントで機能を起動する必要があり、コードです:

[ input [ type_ "submit", onClick TopicSelected, value (getTopic topic) ] [] 

ここUpdate関数です:

update : Msg -> Model -> Model 
update msg model = 
    case msg of 
     TopicSelected -> 
      { model 
       | articles = [] 
       , podcasts = [] 
       , videos = [] 
      } 

view model = 
    div [] 
     [ table [] 
      [ tr [] [ td [] [ b [] [ text "Videos" ] ] ] 
      , div [] <| contentUI model.videos 
      , tr [] [ td [] [ b [] [ text "Podcasts" ] ] ] 
      , div [] <| contentUI model.podcasts 
      , tr [] [ td [] [ b [] [ text "Articles" ] ] ] 
      , div [] <| contentUI model.articles 
      ] 
     ] 

ここではそのルートはその後、onClickイベント全体の機能があります

topicTocheckbox : Topic -> Html Msg 
topicTocheckbox topic = 
    div [] 
     [ input [ type_ "submit", onClick TopicSelected, value (getTopic topic) ] [] 
     , label [] [ text <| getTopic topic ] 
     ] 

code can be found on GitHub

+0

私はあなたの 'Contributor.elm'ファイルを取り出し、いくつかの関数をスタブしてコンパイルすると、' onClick'関数は予期したメッセージを送ります。 [ここにその例があります](https://ellie-app.com/3pXwSHbrmmQa1/0)。他のラッピングコードやオーバーレイが干渉している可能性がありますか? –

+0

私はそうは思わない...私はあなたの例でも動作するコードを観察した。これを診断するために使用できるツールはありますか? –

答えて

1

あなたのコードを見ると、Home.elmのContributor.elmのネストされた「コンポーネント」を使用しようとしていますが、親(ホーム)アップデート機能では配線していません。

これはElmコミュニティの広範かつ議論のあるトピックです。典型的な推奨事項は、絶対に必要でない限り、このようなネストを避けることです。

あなたは絶対にこのように入れ子にする必要がある場合は、あなたのコードは次のようにupdate例のバリエーションを振りかけされます。

type ParentMsg 
    = ... 
    | ChildMsg Child.Msg 

type alias ParentModel = 
    { ... 
    , child : Child.Model 
    } 

case msg of 
    ChildMsg childMsg -> 
     let (childModel, childCmd) = Child.update childMsg model.child 
     in { model | child = childModel } ! [ Cmd.map ChildMsg childCmd ] 

あらゆる層のネストでは、あなたが子供を配線する必要があります状態と子のメッセージとCmdsを前後に渡します。

これは、あなたのコードで貢献者のリストを扱っているということです。これは、あなたが編集しているリストのどの寄稿者であるかを知るためにインデックスを渡す必要があることを意味します(here is a minimal example of updating model array elements)。

エルムはリファクタリングを簡単にすることができます。

+0

フィードバックに感謝いたします。それから私は2つの極端なうちの1つから選ぶ必要があるように見えます。 (1):入れ子になったコントロールのために余分な配管コードを書いておき、モジュールファイルごとに合理的なLOCを維持する。または(2):この1つのモジュール内で、ユーザーがナビゲートできるページごとに全体のビュー定義を持つ1つの膨大なページ(Home.elm)を作成します。 –

関連する問題