modello

0.0.52 • Public • Published

Build Status

modello

Javascript modeling framework

Install

CommonJS module
npm install modello

Define a model

// Define a new 'garden' model
Models.define('garden');
 
// Create an instance of a garden
var garden = new Models.Garden();
Model properties

You can define your model properties:

// Define a new 'garden' model
Models.define('garden', {
    // garden.pumpkins property will be defined for all instances
    pumpkins: {},
    // garden.opened property will get default value
    opened: { default: true },
    // Array definition, defaults to []
    owners: { array: true }
});
// Create an instance of a garden
var garden = new Models.Garden({ pumpkins: 3 });
expect(garden.pumpkins, 'to equal', 3);
expect(garden.opened, 'to be true');
expect(garden.owners, 'to equal', []);

Your model will get all defined properties:

var garden = new Models.Garden();
expect(garden.hasOwnProperty('pumpkins'), 'to be true');

And can be extended with not defined properties:

var garden = new Models.Garden({ carrots: 7 });
expect(garden.carrots, 'to equal', 7);
Model functions

Extend your model with helper functions:

Models.define('garden', {
    pumpkins: { default: 1 },
    carrots: { default: 3 },
    getVeggiesCount: function() {
        return this.pumpkins + this.carrots;
    }
});
garden = new Models.Garden();
expect(garden.getVeggiesCount(), 'to equal', 4);

Init function will be executed when model is created:

Models.define('garden', {
    pumpkins: {},
    init: function() {
        this.pumpkins = 1;
    }
});
garden = new Models.Garden();
expect(garden.pumpkins, 'to equal', 1);
Embedded models

Composing models is easy:

// Define pumpkin model with size property
Models.define('pumpkin', { size: {} });
 
// Define strawberry model
Models.define('strawberry', { color: { default: 'red' }});
 
// Define garden model
Models.define('garden', {
    pumpkin: { type: 'pumpkin' }, // embedded model
    strawberries: { type: 'strawberry', array: true }
});
 
var garden = new Models.Garden({
    pumpkin: new Models.Pumpkin({ size: 1 }),
    strawberries: [ new Models.Strawberry() ]
});
expect(garden.pumpkin.size, 'to equal', 1);
expect(garden.strawberries[0].color, 'to equal', 'red');

Model events

garden = new Models.Garden();
// Attach listener to 'pumpkins' property change
garden.listenTo('pumpkinsChange', callback);
// Attach a generic listener to any change in the model
garden.listenTo('change', callback);
garden.pumpkins++;

All subscriptions will be released when disposing a model:

garden.dispose();

Model data adapter

Models.define('garden', { pumpkins: { default: 0 } });
 
// Specify that we store garden models in localstorage
LocalStorageAdapter.register('garden');
 
// New instance is created and saved, it gets assigned uri property
var garden = new Models.Garden();
 
// You can specify uri property by yourself
garden = new Models.Garden({
    _uri: '/garden/myGarden'
});
 
// Get you model using get method on the model
Models.Garden.get('/garden/myGarden');
 
// Query models using getAll method
result = Models.Garden.getAll( { pumpkins: 0 });
 
// Model changes will be saved on each modification
garden.pumpkins++;
 
// remove your models with remove method
result = Models.Garden.remove(garden._uri);
Non persistent properties

Use store modifier to exlude property from beeing stored:

Models.define('garden', {
    pumpkins: { store: false }
});

Readme

Keywords

none

Package Sidebar

Install

npm i modello

Weekly Downloads

0

Version

0.0.52

License

MIT

Last publish

Collaborators

  • fiolkaf