bem-promised-models

1.1.8 • Public • Published

bem-promised-models Build Status

BEM wrapper for promised-models2

Key features

  • support for BEM and bem-node
  • promise based (Vow Promises)
  • typed attributes
  • nested models and collections
  • async calculations and validation
  • can be used in priv.js with bem-node's i-state

Install

$ npm install --save bem-promised-models

Add node_modules/bem-promised-models/blocks to your levels lists

Add deps for promised-models

({
    mustDeps: [
        {block: 'promised-models', elems: ['model', 'registry', 'registry-storage']}
    ]
})

For noBEM setups use promised-models2

Usage

BEM.Model.decl('fashion-model', {
    attributes: {
        name: {
            type: 'String'
        }
    }
});

var model = BEM.blocks['fashion-model'].create({
    name: 'Kate'
});

model.get('name'); //Kate

Extend

Add declaration for existent one:

BEM.Model.decl('fashion-model', {
    attributes: {
        sename: {
            type: 'String'
        }
    },

    getFullName: function () {
        return [this.get('name') + this.get('sename')].join(' ');
    }
});

var model = BEM.blocks['fashion-model'].create({
    name: 'Kate',
    sename: 'Moss'
});

model.getFullName(); //Kate Moss

Inherit:

BEM.Model.decl('uppercased-model', 'fashion-model', {
    getFullName: function () {
        return this.__base().toUpperCase();
    }
});

Nested models and collections

BEM.Model.decl('podium', {
    attributes: {

        //nested
        currentModel: {
            type: 'Model',
            modelType: 'fashion-model'
        },

        //collections
        avaibleModels: {
            type: 'ModelsList',
            modelType: 'fashion-model'
        }
    }
});

Pass models by client id (for browser render only)

//bh template
var model = BEM.blocks['fashion-model'].create();
ctx.content({
    block: 'view',
    js: {
        modelId: model.cid
    }
});

//BEM.DOM declaration
var model = BEM.blocks['fashion-model'].getOne(this.params.modelId);

Find models by storage id

var model = BEM.blocks['fashion-model'].getAny(this.params.mongoId);

//load data from storage
model.fetch().done();

Define storage

BEM.Model.decl('fashion-model', {
   storage: {
        insert: function (model) {
            //...
        },

        update: function (model) {
            //...
        },

        find: function (model) {
            //...
        },

        remove: function (model) {
            //...
        }
   }
});

API

BEM.Model

.decl(modelName, [baseModel], [properties], [staticProperties])

Add model declaration

.getOne([cid])

Get model instance by client id model.cid

BEM.blocks['some-model']

.create([id], [data])

Create model instance with storage id and data

.getOne([cid])

Get model instance of current class by client id model.cid

.getAny([id])

Get model instance by storage id model.id. If no instance with id was found, create new one.

model instance

See promised-models2

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 1.1.8
    1
    • latest

Version History

Package Sidebar

Install

npm i bem-promised-models

Weekly Downloads

1

Version

1.1.8

License

none

Unpacked Size

88.3 kB

Total Files

11

Last publish

Collaborators

  • delfrrr
  • garmash
  • kotenko.ant
  • mdidkivskyi
  • rifler