0.0.52 • Published 9 years ago

modello v0.0.52

Weekly downloads
6
License
MIT
Repository
github
Last release
9 years ago

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 }
});
0.0.52

9 years ago

0.0.51

9 years ago

0.0.50

9 years ago

0.0.49

9 years ago

0.0.48

9 years ago

0.0.47

9 years ago

0.0.46

9 years ago

0.0.45

9 years ago

0.0.44

9 years ago

0.0.43

9 years ago

0.0.42

9 years ago

0.0.41

9 years ago

0.0.40

9 years ago

0.0.39

9 years ago

0.0.38

9 years ago

0.0.36

9 years ago

0.0.35

9 years ago

0.0.34

9 years ago

0.0.33

9 years ago

0.0.32

9 years ago

0.0.31

9 years ago

0.0.30

9 years ago

0.0.28

9 years ago

0.0.27

9 years ago

0.0.26

9 years ago

0.0.25

9 years ago

0.0.24

9 years ago

0.0.23

9 years ago

0.0.22

9 years ago

0.0.21

9 years ago

0.0.20

9 years ago

0.0.19

9 years ago

0.0.18

9 years ago

0.0.17

9 years ago

0.0.16

9 years ago

0.0.15

9 years ago

0.0.14

9 years ago

0.0.13

9 years ago

0.0.12

9 years ago

0.0.11

9 years ago

0.0.10

9 years ago

0.0.9

9 years ago

0.0.8

9 years ago

0.0.7

9 years ago

0.0.6

9 years ago

0.0.4

9 years ago

0.0.3

9 years ago

0.0.2

9 years ago

0.0.1

9 years ago