单击按钮(应发送消息)后,不会调用我的更新功能。
这里是应该使用onClick事件触发函数的代码:
[ input [ type_ "submit", onClick TopicSelected, value (getTopic topic) ] []
这里是更新功能:
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 ]
]
答案 0 :(得分:1)
查看您的代码,您尝试在Home.elm中使用Contributor.elm的嵌套“组件”,但是您没有在父(Home)更新函数中进行连接。
这是榆树社区中一个广泛而有争议的话题。除非绝对必要,否则典型的建议是尽量避免这样嵌套。
如果您绝对需要以这种方式进行嵌套,那么您的代码将会出现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 ]
在每个图层嵌套时,您需要连接子状态并来回传递子Msg和Cmds。
复杂的是,在你的代码中,你正在处理一个贡献者列表,这意味着你还需要传递一个索引,以便你知道你正在编辑的列表中的哪个贡献者( here is a minimal example of updating model array elements)。
好消息是Elm让重构变得轻而易举!