yeliu84 / statemachine.js

Implementation of State Machine Pattern in JavaScript

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

StateMachineJS

Implementation of State Machine Pattern in JavaScript.

Get Started

  1. Define states in host object

    var app = {                     // host object for state machine
        states: [{                  // states definition
            name: 'STATE_A',        // state name
            entry: 'stateAEntry',   // state entry function
            exit: 'stateAExit',     // state exit function
            transitions: [{         // transitions definition
                trigger: 'event1',  // transition trigger
                dest: 'STATE_B',    // transition destination
                action: 'action1',  // transition action function
                guard: 'guard1'     // transition guard function
            }]
        }, {
            name: 'STATE_B'         // minimal state definition
        }],
    
        // host object is used as the context (`this`) of all state functions
    
        stateAEntry: function() {
            // this function will be called when entering STATE_A
        },
    
        stateAExit: function() {
            // this function will be called when leaving STATE_A
        },
    
        action1: function() {
            // this function will be called when "event1" transition is taking place
        },
    
        guard1: function() {
            // this function returns `false` to prevent "event1" transition from
            // happening
        }
    };
  2. Initialize host object

    StateMachine.init(app);
  3. Check current state

    app.getCurrentStateName();          // => 'STATE_A', app is now in the first state
  4. Trigger state transition

    app.handleStateTrigger('event1')
  5. Check current state again

    app.getCurrentStateName();          // => 'STATE_B', app is now in the STATE_B state

API Document

TODO

About

Implementation of State Machine Pattern in JavaScript

License:MIT License


Languages

Language:JavaScript 95.1%Language:HTML 2.4%Language:CSS 1.7%Language:Makefile 0.8%