結合狀態機的開發風格

2021-07-26 20:37:32 字數 2115 閱讀 5343

本文主要以***的html5版本為藍本,討論結合狀態機開發的思路和實踐方式。狀態機選型使用statechart.js。

特別是狀態機介紹,內容非常好,強烈推薦。

ng-show="fsm.iscurrent('/menu')"

div>

ng-show="fsm.iscurrent('/menu/prod')"

div>

ng-show="fsm.iscurrent('/menu/feedback')"

div>

ng-show="fsm.iscurrent('/list')"

div>

ng-show="fsm.iscurrent('/level')"

div>

ng-show="fsm.iscurrent('/order/reward')"

div>

ng-show="fsm.iscurrent('/order/giftpack')"

div>

ng-show="fsm.iscurrent('/invoice')"

div>

ng-show="fsm.iscurrent('/charge')"

div>

頁面顯示與否,例子上面已經說了。而對於ng-click這種事件觸發,直接用send方法即可。

class="feedback-btn">

ng-click="fsm.send('feedback', 'hesitate')"

class="accept-btn">

考慮span>

a>

ng-click="fsm.send('feedback', 'refuse')"

class="refuse-btn">

拒絕span>

a>

div>

可以看到,事件也可以捎帶引數的,這樣可以在該狀態的event中進行處理,如下:

# 反饋

@state

'feedback',->

# 進行反饋操作

@event

'feedback', (operationtype) ->

product = $scope.viewmodel.product

if product.opertype == '1'

new toast(

context: $('body')

message: "該產品不可推薦"

).show();

return

qryfeedbackservice.event

"userseq": $scope.viewmodel.product.userseq

"servnumber": $scope.telnum

"operationtype": operationtype

.then

(ok) =>

@goto

'/menu/index'

, (err) ->

new toast(

context: $('body')

message: err

).show()

需要注意的是,event是掛靠在某個狀態下的,如果你是子狀態的話的,event會先在子狀態中找,如果沒有找到會在父狀態上找。

通過這種方式,就可以實現多個子狀態共享event,例如獎品頁面、獎品包頁面都有選擇功能,就可以把這個操作放到父狀態的event中去。

很多狀態機都實現了某些特殊狀態,如進入狀態,退出狀態這種事件。statechart也實現了,對應的是enter和exit,**大體上是:

@state

'menu',->

@enter

->

#todo

@exit

->

#todo

但是需要注意的是,重複進入這個狀態的話,是會重複執行的。所以對於a -> b -> c這樣的業務流程,從a到b和c回退到b,都會執行這個enter,

就無法區分這種情況了。因為通常,從a到b是進行初始化,而從c回到b得保留原來b的資料狀態。所以實際上我很少使用這些特殊事件,除非:

狀態機 狀態機0

近半年都忙於做專案,沒有太多的時間去整理和總結在專案中用過的技術 個人還是覺得技術需要總結提煉和沉澱的,忙到沒時間去總結提公升其實不 是什麼好事,這次講下狀態機,在戰鬥型別的遊戲中角色有多種不同的狀態,而狀態的切換錯綜複雜,23種設計模式中有一種模式叫做狀態模式,不過 這種模式是把狀態切換條件放到各...

python 狀態機 Python 狀態機

class statemachine def init self self.handlers 狀態轉移函式字典 self.startstate none 初始狀態 self.endstate 最終狀態集合 引數name為狀態名,handler為狀態轉移函式,end state表明是否為最終狀態 de...

學習筆記 4 狀態機與動畫結合

學習日記一和學習日記二分別學習了qt動畫框架和qt狀態機框架。今天學習如何將兩者結合起來。回顧一下狀態機的幾個要素 狀態機 狀態 切換 qtransition 那麼如何在加入動畫呢,其實很簡單,我們通過切換來改變狀態,在切換中加入動畫就行了。直接上例子 qstatemachine statemach...