JavaScript有限状态机

JavaScript有限状态机,javascript,forms,state-machine,fsm,Javascript,Forms,State Machine,Fsm,问题陈述: 我有一个表单,我需要对其应用状态,因为有多个可能的场景,但不是一个非常定制且不是非常干净的JavaScript类,如果单击了这个和那个,但不是这个和那个等等。。。我想应用一个状态和一个转换来覆盖场景 我想使用来建模状态及其转换。我一直在想 { initial: 'none', events: [ { name: 'completing', from: ['none', 'completing', 'complete', 'blocked'],

问题陈述

我有一个表单,我需要对其应用状态,因为有多个可能的场景,但不是一个非常定制且不是非常干净的JavaScript类,如果单击了这个和那个,但不是这个和那个等等。。。我想应用一个状态和一个转换来覆盖场景

我想使用来建模状态及其转换。我一直在想

{
    initial: 'none',
    events: [
        { name: 'completing',   from: ['none', 'completing', 'complete', 'blocked'],    to: 'completing'    },
        { name: 'completed',    from: ['blocked', 'completing'],                        to: 'completed'     },
        { name: 'continue',     from: ['blocked', 'completed'],                         to: 'continue'      },
        { name: 'blocked',      from: ['none', 'completing', 'complete'],               to: 'blocked'       }
    ]
}
我想知道哪些状态和转换最好(以及在每个场景中何时转换它们)

形式

(对于屏幕截图来说太长了)

规则及其场景

  • 访问继续按钮
状态
complete
遵循以下规则: 第2页的导航“继续”按钮应变灰,并且在满足以下两种情况之一之前不可用

情景1

1) .我正在完成此筛选工具…-用户选择-我自己或在其他人的支持下选择我自己

2) 。你是否担心别人如何对待你用户选择-否

3) 。你觉得与他人沟通困难吗?-用户选择-否

4) 。您是否发现难以理解或保留信息?-用户选择-否

5) 。您是否发现难以做出决策或理解其影响用户选择-否

场景2

1) .我正在完成此筛选工具…-用户选择-代表其他人

2) 。所有问题都已完成

  • 你是否担心别人如何对待你?
State
blocked
遵循以下规则:第1页上有条件行为,这取决于选择的选项。您是否担心其他人如何对待您

情景1

我正在完成这个筛选工具…-用户选择-我自己

你是否担心别人如何对待你用户选择-是

1) 。将显示此部分的信息警报 2). “沟通与理解”部分变灰,用户无法使用

你是否担心别人如何对待你用户选择-否

1) 。不显示此部分的信息警报

2) 。沟通与理解部分未加密,用户可以使用

场景2

我正在完成这个筛选工具…-用户选择-在其他人的支持下或代表其他人选择自己

你是否担心别人如何对待你用户选择-是

1) 。将显示此部分的信息警报 2). 沟通与理解部分未加密,用户可以使用

用户选择-否

1) 。不显示此部分的信息警报 2). 沟通与理解部分未加密,用户可以使用


当用户填写表单时,他们处于
填写
状态。任何人都可以建议设置和更改时间。

创建类状态,扩展不同的状态。创建在启动状态下开始运行的类StateMachine。每个状态都有方法,在发生操作时返回下一个逻辑状态。对使用DIC的所有类使用单例。这有意义吗?如果我的思维过程似乎与你有关,我可以帮你把它充实起来作为一个答案。编辑:我的团队已经构建了一些非常类似的东西来管理Android上复杂的动画自定义视图:)你现在的问题是什么?“我想得到一些意见”是一个讨论,不适合StackOverflow。@Angad:“singleton”和“class”在这方面不太协调JS@Bergi我个人已经改用打字脚本+反转,但同意了。虽然类仍然是可以在POJS中手动设计的东西,但如果没有类似瓶状结构的东西,我也不会梦想这样做,因为“手动”单例将成为一种测试nightmare@Kal考虑使用FSA建模,它是一个更新和更强大的库。