我有以下面板组件,名为AdvancedPanel with controlBarContent:
<!-- AdvancedPanel.mxml -->
<s:Panel>
<s:states>
<s:State name="normal" />
<s:State name="edit" />
</s:states>
<s:controlBarContent>
<s:Button
includeIn="edit"
label="Show in edit"
/>
<s:Button
label="Go to edit"
click="{currentState='edit'}"
/>
</s:controlBarContent>
</s:Panel>
Run Code Online (Sandbox Code Playgroud)
我创建了第二个面板,名为CustomAdvancedPanel,基于AdvancedPanel,因为我不想重新声明controlBarContent
<!-- CustomAdvancedPanel.mxml -->
<local:AdvancedPanel>
<s:Button includeIn="edit" label="Extra edit button" />
</local:AdvancedPanel>
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为CustomAdvancedPanel中的"edit"状态未根据编译器声明.我必须在CustomAdvancedPanel.mxml中重新声明编辑状态,如下所示:
<!-- CustomAdvancedPanel.mxml with edit state redeclared -->
<local:AdvancedPanel>
<local:states>
<s:State name="normal" />
<s:State name="edit" />
</local:states>
<s:Button includeIn="edit" label="Extra edit button" />
</local:AdvancedPanel>
Run Code Online (Sandbox Code Playgroud)
在应用程序组件中使用CustomAdvancedPanel会显示一个带有"Go to edit"按钮的空面板.但是当我单击它时,"额外编辑按钮"变为可见,但是控制栏内的"在编辑中显示"按钮则不可见.
当CustomAdvancedPanel为空,没有重新声明的状态和"额外编辑按钮"时,面板工作正常.
我认为这是因为在AdvancedPanel中声明的State对象与CustomAdvancedPanel不同,因此状态是不同的,即使它们具有相同的名称.然而.我不能在CustomAdvancedPanel中使用AdvancedPanel的状态而不用(重新)在mxml中声明它们.
有没有办法实现这种状态重用?或者有更好的方法来获得相同的结果吗?