繁体   English   中英

关于Ember.js中StateManager的最佳实践

[英]Best practice regarding StateManager in Ember.js

Ember.js中的StateManager还没有详细记录,所以我对它的用法有一些疑问。

  1. 是否应该努力只从州经理内部调用.goToState
  2. 我有时会发现自己在视图中的状态管理器中镜像方法,例如save: -> StateManager.send("save") 这有意义还是我错过了什么?
  3. 模型的所有修改(通常)是否应该通过州经理?
  4. 如果一个视图具有不同的状态,是应该使用具有子状态的ViewState建模,还是应该使用计算属性和视图属性仅在视图中保存该信息(没有状态管理器知道视图内部状态)?*

* 一个示例可以是三步形式,其中相同的模板用于所有状态,但是在三个步骤中显示/隐藏不同的区域。

Github参考: https//github.com/emberjs/ember.js/tree/master/packages/ember-states/lib

是否应该努力只从州经理内部调用.goToState?

大概。 我不确定这一点,但在我看来,因为国家经理知道你所处的状态,所以它是强制执行合法国家过渡的地方。 如果你从国家经理外面打电话给.goToState,你就是在没有真正知道自己处于什么状态的情况下这样做的,虽然这有时候可以(也许这是一个你可以从任何其他州获得的状态)但这不是一个好习惯将在。

我有时会发现自己在视图中的状态管理器中镜像方法,例如save: - > StateManager.send(“save”)。 这有意义还是我错过了什么?

我喜欢pangratz对此有何看法。

模型的所有修改(通常)是否应该通过州经理?

我使用状态图的方式,没有。 我已经看到一些人使用状态图作为控制器层的完全替代品,但是,如果这是你的工作方式,那么是的,它应该通过状态管理器。 模式是避免从视图中直接操纵模型; 无论是控制器层还是中间的状态管理器,对我来说都是一个没有实际意义的问题。

但是,我使用状态图表的方式是使状态管理器管理应用程序的状态。 如果修改将改变应用程序的状态(例如,如果在更新完成时有进度指示器),它可以扮演流量管理器来修改模型,但在我看来,模型更新不是其任务的一部分; 他们属于控制者。

如果一个视图具有不同的状态,是应该使用具有子状态的ViewState建模,还是应该使用计算属性和视图属性仅在视图中保存该信息(没有状态管理器知道视图内部状态)?

我认为州经理需要知道(或应该知道)观点的内部状态。

出于好奇,您是来自Web开发背景还是桌面/移动应用程序开发背景? 我来自网络开发,状态图表对我来说是一个新概念。 我发现阅读David Harel 的规范状态图表文件非常有用('ware PDF!)。 对于一篇学术论文而言,这是令人惊讶的可读性,并列出了自2010年底以来大部分SproutCore / Ember世界一直在使用的基本状态图表概念(也就是Michael Cohen写作Ki时的想法)。

关于你的观点2

我有时会发现自己在视图中的状态管理器中镜像方法,例如save: -> StateManager.send("save") 这有意义还是我错过了什么?

您可以在Handlebars模板中使用action助手,并将StateManager设置为target

{{action "send" target="App.stateManager"}}

send事件将发送到您的App.stateManager

暂无
暂无

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

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