modelflow
v0.0.1
Published
A simple event oriented state machine.
Downloads
4
Readme
ModelFlow->
ModelFlow is a JavaScript evented state machine written to run both in node.js and the browser.
##Design Goals
- Easily create state machine on top of a existing data model(s).
- Define states based on the data models attribute values.
- Ability to listen for state changes and run callbacks.
- Provide a mechanism to optionally enforce linear paths from state to state. This may be used an alternative to flow control libraries.
Installation / Basic Usage
ModelFlow depends on Underscore and is built as a complement to Backbone.
On the Server
Install the library using npm or add it to your package.json
file as a dependancy. Instances of ModelFlow are technically Backbone Models, however the module can be used completely standalone.
$npm install modelflow
Define a StateModel class, create an instance of it.
var ModelFlow = require('modelflow');
var CustomFlow = ModelFlow.StateModel.extend({
states : {
state1 : { foo : 1 },
staet2 : { foo : 2 }
}
});
var flow = new CustomFlow();
On the Client
Just like server, however ModelFlow will be pushed on the window as a global.
<script type="text/javascript" src="underscore.js"></script>
<script type="text/javascript" src="backbone.js"></script>
<script type="text/javascript" src="ModelFlow.js"></script>
<script type="text/javascript">
var CustomFlow = ModelFlow.StateModel.extend({
states : {
state1 : { foo : 1 },
staet2 : { foo : 2 }
}
});
var flow = new CustomFlow();
</script>
Moar Usage
###Bind callbacks on state changes
var CustomFlow = ModelFlow.StateModel.extend({
states : {
init : { foo : 1 }
}
});
var flow = new CustomFlow();
flow.bind('state:->init', function() {
console.log('inited');
});
flow.set({ foo : 0 }); //this does nothing
flow.set({ foo : 1 }); //'inited' is logged to console