首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构建模型,使其易于转换为动态形式

如何构建模型,使其易于转换为动态形式
EN

Stack Overflow用户
提问于 2017-08-10 07:05:21
回答 1查看 207关注 0票数 0

我想要一个专家的意见,关于如何塑造一个模型,使其适合表格/表单。

我试了很多,但还是卡住了。

这是我的模型:

代码语言:javascript
复制
type alias Model =
{   freeSyllables : List FreeSyllable
,   addFreeSyllableInput : String
,   addUsageStartInput : Bool
,   addUsageMidInput : Bool
,   addUsageEndInput : Bool
}

它是由以下元素组成的:

代码语言:javascript
复制
type alias FreeSyllable =
{   syllable : String
,   usage : Usage
}

type alias Usage =
{   start : Bool
,   mid : Bool
,   end : Bool
}

我的视图是表格和表格的混合体。如果我单击编辑按钮,表格/表单应该是每行可编辑的,每一行都应该有编辑按钮。

您将如何设计模型,以及如何对表/表单中的更改做出反应?

谢谢... :D

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-10 14:28:21

灵感可以从Todo MVC example中获得

这个想法是在FreeSyllable记录中有一个editing : Bool字段,并根据editing的值显示inputtext (或其他值)。editing的值可以通过单击editsubmit按钮来设置(或通过失去焦点事件...管它呢)

这里有一个例子,只是为了说明它是如何工作的:

具有新editing字段的FreeSyllable类型:

代码语言:javascript
复制
type alias FreeSyllable =
  {   syllable : String
  ,   usage : Usage
  ,   editing : Bool
  }

显示inputtext并发送UpdateSyllableEditingSyllable事件的view

代码语言:javascript
复制
view model =
    div []
        [ ul [] (List.indexedMap viewSyllable model.freeSyllables)
        ]

viewSyllable index freeSyllable =
    li []
        [ if freeSyllable.editing then
            div []
                [ input [ onInput (UpdateSyllable index), value freeSyllable.syllable ] []
                , a [ onClick (EditingSyllable index False) ] [ text "submit" ]
                ]
          else
            div []
                [ text freeSyllable.syllable
                , a [ onClick (EditingSyllable index True) ] [ text "edit" ]
                ]
        ]

更新模型的update

代码语言:javascript
复制
type Msg
    = UpdateSyllable Int String
    | EditingSyllable Int Bool


update msg model =
    case msg of
        UpdateSyllable index syllable ->
            let
                updateSyllable idx freeSyllable =
                    if idx == index then
                        { freeSyllable | syllable = syllable }
                    else
                        freeSyllable
            in
                { model | freeSyllables = List.indexedMap updateSyllable model.freeSyllables }

        EditingSyllable index editing ->
            let
                updateSyllable idx freeSyllable =
                    if idx == index then
                        { freeSyllable | editing = editing }
                    else
                        freeSyllable
            in
                { model | freeSyllables = List.indexedMap updateSyllable model.freeSyllables }

希望我已经弄清楚了这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45601929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档