2012-11-07 17 views
21

Qualcuno sa di eventuali implementazioni javascript di una macchina a stati? Il mio obiettivo è impostare un'implementazione della macchina di stato che leghi gli eventi alle transizioni di stato. Quindi, se un utente fa clic su un pulsante, lo stato verrà modificato e questo stato potrebbe definire determinati valori negli oggetti da modificare, ad esempio.JavaScript State State Machine

Voglio che questo sia una macchina a stati semplicemente perché ci sarà un file json di regole che permetterà di dettare quali valori cambiano di vari oggetti quando vengono chiamati determinati eventi. Poiché questo sarà strutturato all'interno del file, penso che sarebbe facile analizzare tali informazioni in un oggetto macchina di stato.

+0

https://github.com/jakesgordon/javascript-state-machine potrebbe essere che stai cercando. – Gael

risposta

3

Provate a dare un'occhiata a https://github.com/steelbreeze/state.js - supporta gran parte della semantica della macchina di stato come descritto nelle specifiche di UML 2 pur rimanendo performante. Non c'è ancora molto sulla documentazione, ma gli esempi e i test dovrebbero fornire un buon riferimento.

+0

Ho usato quella libreria e ne sono molto soddisfatto. Lo abbiamo integrato con il nostro approccio thingml (https://github.com/SINTEF-9012/ThingML) – bmorin

1

La mia scelta su questo con la libreria micro js-fsm.

Caratteristiche

  • Stato basato descrizione FSM. Uno stato composto da una e una serie di transizioni di stato.
  • Transizione da eventi. Più eventi definiscono eventi ORed.
  • Transizione dalle condizioni. Una condizione è una chiave: coppia di valori che deve corrispondere all'oggetto condizione. Chiave multipla, coppie di valori definite condizioni ANDed. Molteplici condizioni definiscono condizioni OR
  • Ogni transizione può facoltativamente chiamare azioni o più azioni. Le azioni possono opzionalmente avere argomenti o essere membri di questo.
  • La macchina di stato può essere mescolata (come mixin) a un oggetto esistente o al prototipo di un costruttore. Viene fornito un metodo per questo.
  • La macchina di stato può facoltativamente registrare se esiste un metodo di registrazione o è fornito.
  • I moduli AMD e Node sono supportati.
  • Test unitari con QUnit.

js-fsm github page.

3

Un po 'di promozione per la mia macchina a stati: stateflow Ho appena creato la mia macchina di stato perché non ne trovai nessuna che fosse abbastanza semplice per me.

un flusso è definito con un oggetto js in cui la proprietà è il nome dello stato e il valore è un altro oggetto js con le seguenti proprietà.

  • tipo: inizio, fine o stato (predefinito).
  • azione: funzione con un oggetto Istanza stato impostato su questo, può anche essere denominato azione registrata in precedenza o un'altra definizione di flusso in questo caso è un flusso secondario.
  • on: proprietà deve essere abbinato dell'evento e il valore è lo stato successivo al goto

semplice esempio

var stateflow = require('stateflow'); 
var flow = new stateflow.StateFlow({ 
    a: { 
     type:'begin', 
     action: function(complete) { 
      // do something 
      complete('done');  
     }, 
     on: { 
      done:'b', 
      again:'a' 
     } 
    }, 
    b: { 
     type:'end', 
     action: function(complete) { 
      complete('finished'); 
     } 
    } 
}); 
flow.start(function(event) { 
    console.log('flow result:', event); 
}); 

Check it out su git https://github.com/philipdev/stateflow o tramite npm

4

Recentemente ho costruito un'implementazione macchina a stati in JS, che è certamente il più facile da configurare, grazie alla sua DSL transizione:

transitions: [ 
    'next : intro > form > finish', 
    'back : intro < form   < error', 
    'error :   form >   error', 
    'restart : intro  < finish' 
] 

E 'molto flessibile sia in assegnazione configurazione e eventi gestore, è possibile aggiungere e rimuovere stati in fase di esecuzione, pausa e riprendere transizioni, gancio in una tonnellata di eventi, con helper per jQuery e quadri reattivi come Vue:

state-machine-demo

Documenti e tutta una serie di DEM os qui: