繁体   English   中英

向Ember.StateManager发送动作:goToState是强制性的吗?

[英]Sending action to Ember.StateManager : is goToState mandatory?

在Ember.StateManager的文档中,它说:“在一个动作方法的内部,给定的状态应该在其StateManager上委托goToState调用”。 这是否意味着如果我发送一条动作消息,我一定需要转移到另一个州。 是否有可能保持相同的状态但通过发送动作来完成某项任务? 例如,我处于“加载”状态,我运行两个动作“预处理”和“显示”。

非常简单:动作消息可以但不必转换到另一个状态。

你没有问过的东西,但是相关且重要:在enterexit方法中调用goToState是一个坏主意和糟糕的设计。

在处理状态图时,您可以随心所欲地做任何事情。 在事件处理程序中切换状态不是强制性的。 常见的情况是显示取消/保存对话框的事件处理程序。 您可以轻松地将对话框放在事件处理程序中的页面上,并根据按下的按钮进行相应的操作。

另外一个问题是应该的每一个事件处理程序基本上只是去到另一个状态。 在上面的场景中,你当然可以进入“确认”状态,state-enter方法将显示对话框,并且会有两个处理程序,每个按钮一个。 那些处理程序反过来会转到其他州。

我认为这两种设计选择同样有效,至少在那种情况下是这样。 如果你选择为每个动作实现一个单独的状态,你将会得到许多小而简洁的状态。 如果你选择在事件处理程序中自己做事,你的状态会更大,但会有更少的状态。

我要说的一件事是, 如果一个事件处理程序变得复杂,你可能更适合使用一个新的状态。 另外,要保持一致。

对于您的特定情况,如果我正确读取它,您希望加载数据,然后根据事件更改显示以显示数据。 在这种情况下,我会使用新的状态。

所以你按一个开始这个过程的按钮

  • 在事件处理程序中,转到某种“MyDataSection”状态
  • 初始子状态是'loadData'
  • 输入'loadData'的状态方法开始加载过程
  • 'loadData'中的事件处理程序'dataLoaded'用于处理数据加载的时间; 这意味着您需要在加载数据时触发事件
  • 'dataLoaded'事件进入'show'状态
  • show state显示视图(或删除活动指示符等)并处理来自显示的任何事件。

这里有什么好处,如果你有多种方法可以进入应用程序的这一部分,那么导致这一部分的所有动作只需要进入这种状态,而且一切都会发生同样的事情。 另请注意,由于视图事件处理程序处于显示状态,因此如果用户在加载数据时按下按钮,则不会发生任何事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM