【问题标题】:Best practice regarding StateManager in Ember.jsEmber.js 中有关 StateManager 的最佳实践
【发布时间】:2012-04-13 04:32:01
【问题描述】:

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

【问题讨论】:

  • 期待您对此问题的反馈。我可以在互联网上找到的所有示例都过于简单化了。再说一次,Ember.js 中的东西太新了,我相信你和我想出的任何方法都是“正确的”,只要它们有效:)(我目前正在努力/重新编写我的一个不断增长的应用程序使用 StateManager。它工作得很好,但我和你一样,不确定我做的事情“正确”)。

标签: javascript model-view-controller viewstate ember.js state-management


【解决方案1】:

关于你的观点2

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

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

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

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

【讨论】:

    【解决方案2】:

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

    大概吧。我不确定这一点,但在我看来,因为状态管理器知道你处于什么状态,所以它是强制执行合法状态转换的地方。如果您从状态管理器外部调用 .goToState,那么您在执行此操作时并不真正知道自己处于什么状态,虽然有时这还可以(也许这是您真正可以从任何其他状态达到的状态),但这不是一个好习惯进入。

    我有时会发现自己在该州镜像方法 视图上的经理,例如保存:-> StateManager.send(“保存”)。做 这是有道理的还是我错过了什么?

    我喜欢 pangratz 对此的看法。

    应该所有的修改 模型(通常)通过状态管理器?

    我使用状态图的方式,不。我见过一些人使用状态图作为控制器层的完全替代品,但是,如果这就是你的工作方式,那么是的,它应该通过状态管理器。该模式是为了避免从视图直接操作模型;无论是控制器层还是介于两者之间的状态管理器对我来说似乎都是一个有争议的问题。

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

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

    我认为状态管理器需要知道(或应该知道)视图的内部状态。

    出于好奇,您是 Web 开发背景,还是桌面/移动应用开发背景?我来自网络开发,状态图对我来说是一个新概念。我发现阅读 David Harel 的 the canonical State Chart paper('ware PDF!)非常有用。对于一篇学术论文来说,它的可读性令人惊讶,并列出了自 2010 年底以来大多数 SproutCore/Ember 世界一直在使用的基本状态图概念(即 Michael Cohen 在编写 Ki 时所想到的。)

    【讨论】:

    • 附加链接:Frozen Canuck aka Michael Cohen 的状态图与控制器 frozencanuck.wordpress.com/2011/03/09/…。虽然对于 SproutCore 它仍然是一个有效的资源。
    • 来自网络开发背景。
    • 那么 Harel 的论文或 Ian Horrocks 的书(如果您能以合理的价格找到一本)会对您有很大帮助。
    • 值得注意的是,这个答案的相关性随着 Ember.js 的更新版本而显着恶化。
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2013-10-02
    • 2010-10-06
    • 2011-10-28
    • 2010-09-10
    • 2011-10-11
    • 1970-01-01
    • 2014-04-26
    相关资源
    最近更新 更多