Ember.js中的StateManager
还没有很好的记录,所以我对它的使用有一些疑问。
.goToState
?save: -> StateManager.send("save")
。这有意义还是我错过了什么?ViewState
建模,还是应该使用计算属性和视图属性仅在视图中保存该信息(没有状态管理器知道查看内部状态)?* * 一个示例可以是三步形式,其中相同的模板用于所有状态,但在三个步骤中显示/隐藏不同的区域。
Github参考:https://github.com/emberjs/ember.js/tree/master/packages/ember-states/lib
答案 0 :(得分:6)
关于你的观点 2 :
我有时发现自己在视图中的状态管理器中镜像方法,例如
save: -> StateManager.send("save")
。这有意义还是我错过了什么?
您可以在Handlebars模板中使用action
帮助器,并将StateManager设置为target
{{action "send" target="App.stateManager"}}
send
事件将发送到您的App.stateManager
。
答案 1 :(得分:6)
是否应该只在州内调用.goToState 经理?
可能。我肯定不知道这一点,但在我看来,因为州经理知道你所处的状态,所以它是执行合法国家过渡的地方。如果你从国家经理外面打电话给.goToState,你就是在不知道自己处于什么状态的情况下做到这一点,虽然这有时候还可以(或许它是一个状态,你真的可以来自任何其他国家)这不是一个很好的习惯。
我有时发现自己在州内镜像方法 视图中的经理,例如保存: - > StateManager.send("保存&#34)。是否 有意义还是我错过了什么?
我喜欢pangratz对此的评价。
应该全部修改 模特(一般)经过国家经理?
我使用状态图的方式,没有。我已经看到有些人使用状态图作为控制器层的完全替代品,然而,如果这就是你如何工作,那么是的,它应该通过状态管理器。模式是避免从视图中直接操纵模型;无论是控制器层还是状态管理器,对我来说都是一个没有实际意义的点。
然而,我使用状态图表的方式是使状态管理器管理应用程序的状态。如果修改将改变应用程序的状态(例如,如果在更新完成时有进度指示器),它可以播放流量管理器以修改模型,但在我看来,模型更新不是部分其任务;他们属于控制者。
如果有一个观点 不同的状态,应该使用带子的ViewState建模 状态,或者我应该使用计算属性和视图属性 仅在视图中保存该信息(没有状态管理器 知道内部状态的观点)?
我认为州经理需要知道(或应该知道)该观点的内部状态。
出于好奇,您是来自网络开发背景还是桌面/移动应用开发背景?我来自网络开发,状态图表对我来说是一个新概念。我发现David Harel阅读the canonical State Chart paper非常有用(' ware PDF!)。对于一篇学术论文来说,它具有令人惊讶的可读性,并列出了自2010年底以来大部分SproutCore / Ember世界一直在使用的基本状态图表概念(即Michael Cohen当他想到的时候写了Ki。)