簡體   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