本文主要以***的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...