如何按SCXML规范定义合法状态配置的目标集合?
SCXML多目标集合的写法说明
嘿,刚好我之前在项目里折腾过SCXML的多状态目标配置,给你明确一下:所有支持多目标的属性(包括<scxml>/<state>的initial,以及<transition>的target),都是用空格分隔状态ID,而非数组形式。
下面给你分场景举例,再结合规范内容说明:
1. <transition>的target属性
这是最常用的多目标场景,比如你想触发一个事件后同时进入stateA和stateB,写法如下:
<transition event="triggerMultiState" target="stateA stateB"/>
按照SCXML规范定义,
target属性的值是一个空格分隔的状态标识符列表,用于指定转换完成后需要激活的状态集合。
2. <scxml>或<state>的initial属性
当你需要指定初始状态集合(比如根节点的初始多状态,或者正交复合状态的初始子状态),同样用空格分隔:
<!-- 根节点指定初始多状态 --> <scxml version="1.0" initial="startState helperState"> <!-- 子状态定义 --> </scxml> <!-- 正交状态指定初始子状态集合 --> <state id="orthoParent" type="parallel" initial="orthoChild1 orthoChild2"> <state id="orthoChild1"/> <state id="orthoChild2"/> </state>
这里要注意,只有当状态是正交类型(type="parallel"),或者你的状态配置本身支持多个同时激活的合法状态时,这种多初始状态的写法才有效,否则会违反规范里的合法状态配置规则。
另外补充个小细节:如果状态ID里包含特殊字符,可能需要用转义,但一般情况下用空格分隔就完全满足需求了,我自己在实际项目里这么写从来没出过问题~
内容的提问来源于stack exchange,提问作者Ruebe
相关产品推荐
相关产品推荐

